А что считать правильной архитектурой? Ведь все зависит от задачи. Можно сделать 2 интерфейса, описывающих расчет и отрисовку. Реализовать эти интерфейсы. Для создания конкретных экземпляров сделать абстрактную фабрику, которая будет возвращать готовые объекты для расчета и отрисовки. В основном коде программы создаем нужную фабрику, получаем объекты и вызываем у них методы расчета/отрисовки