Вопрос дизайна: возникли проблемы с определением моих классов - PullRequest
1 голос
/ 03 марта 2010

Я на полпути к проекту ООП в финансовой индустрии, и я оглядываюсь назад на свои дизайнерские решения. Я решил некоторые проблемы, используя шаблоны, и я особенно горжусь ими, но в других местах мне, кажется, не хватает строгости. Мои собственные сценарии использования чрезвычайно высокого уровня, так как фактический ввод, сделанный пользователем, даже не сравнивается со сложностью вычислений, сделанных под капотом. Чтобы дать вам представление, мне пришлось интегрировать сторонний математический решатель и целый анализатор, чтобы пользователь мог вводить свои собственные формулы.

Просто так получается, что у меня есть добрых два десятка классов, все они названы одинаково: калькулятор - все что угодно

Моя первоначальная проблема заключалась в том, что у меня не было четких и четких доменных объектов для работы (за исключением, например, модуля синтаксического анализа). Мне было очень трудно думать с точки зрения объектов - было бы гораздо проще написать программу процедурно, так как по сути мы просто работаем либо с деньгами, либо с процентами, чтобы получить новые суммы и ... проценты. Я не мог думать ни о каком другом объекте, кроме Калькуляторов ... вычисляя различные веса или суммы. Все казалось огромным алгоритмом, включающим $$

Мой вопрос заключается в том, как можно думать об объектах, когда объекты не могут быть естественным образом найдены в модели предметной области или в вариантах использования?

Ответы [ 2 ]

0 голосов
/ 04 марта 2010

Вы можете думать о самом Калькуляторе как об абстрактном объекте в вашей доменной модели. Затем примените шаблон разработки стратегии, чтобы позаботиться о различных алгоритмах расчета. Как только CalculatorStrategy будет создан, вы можете использовать другие шаблоны, такие как декораторы и строители, чтобы получить то, что вы хотите.

0 голосов
/ 03 марта 2010

Я всегда находил самый естественный способ - попытаться понять, каким образом вы можете обобщать похожие (или похожие) объекты. В некотором смысле, вы выполнили тяжелую работу, создав особые случаи, теперь вам просто нужно искать сходства.

Например, чем все ваши классы калькуляторов похожи (кроме названия)? Они инициализируются аналогично? У всех них есть метод "Calculate"? Все ли они используют набор вычислений более низкого уровня? Если вы можете абстрагировать структуру своих вычислений, ваши множественные классы, естественно, будут моделироваться как особые случаи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...