52 Часть I. Обзор
Конечно, сложная логика — это удачный повод вспомнить об объектах, и объектно-
ориентированный вариант решения проблемы связан с использованием модели пред-
метной области, которая, по меньшей мере в первом приближении, структурируется
преимущественно вокруг основных сущностей рассматриваемого домена. Так, например,
в лизинговой системе следовало бы создать классы, представляющие сущности "аренда",
"имущество", "договор" и т.д., и предусмотреть логику проверок и вычислений: так, на-
пример, объект, представляющий сущность "имущество", вероятно, уместно снабдить
логикой вычисления стоимости.
Выбор модели предметной области в противовес сценарию транзакции — это как раз та
смена парадигмы программирования, о которой так любят говорить апологеты объект-
ного подхода. Вместо использования одной подпрограммы, несущей в себе всю логику,
которая соответствует некоторому действию пользователя, каждый объект наделяется
только функциями, отвечающими его природе. Если прежде вы не пользовались моделью
предметной области, процесс обучения может принести немало огорчений, когда в поис-
ках нужных функций вам придется метаться от одного класса к другому.
Различие между двумя рассматриваемыми подходами на простом примере описать
довольно сложно, но я все-таки попытаюсь это сделать. Простейший способ состоит в
сопоставлении диаграмм последовательностей (sequence diagrams), соответствующих обо-
им вариантам решения одной проблемы (рис. 2.1 и 2.2).
В задаче определения зачтенного дохода от продажи каждого продукта в рамках за-
данного контракта (подробнее это рассматривается в главе 9, "Представление бизнес-
логики") алгоритм вычислений зависит от типа продукта. Вычислительный метод дол-
жен распознать тип продукта, применить подходящий алгоритм, а затем создать соответ-
ствующий объект, представляющий значение дохода. (Аспекты взаимодействия с базой
данных для простоты здесь не рассматриваются.)
Из рис. 2.1 видно, что все обязанности возлагаются на метод сценария транзакции, полу-
чающий данные от объектов типа шлюз таблицы данных. На рис. 2.2 показано, напротив,
несколько объектов, каждый из которых несет ответственность за выполнение своей доли
функций, а результат генерируется объектом "Стратегия определения зачтенного дохода".
Ценность модели предметной области состоит в том, что, освоившись с подходом, вы
получаете в свое распоряжение множество приемов, позволяющих поладить с возрас-
тающей сложностью бизнес-логики "цивилизованным" путем. Например, с увеличением
количества алгоритмов расчета дохода достаточно создавать новые объекты "Стратегия
определения зачтенного дохода". При использовании сценария транзакции в аналогичной
ситуации пришлось бы добавлять в логику метода дополнительные условия. Если вы на-
столько же неравнодушны к объектам, как и я, то наверняка предпочтете модель предмет-
ной области даже в самых простых случаях.
Стоимость практической реализации модели предметной области обусловлена степе-
нью сложности как самой модели, так и конкретного варианта слоя источника данных.
Чтобы добиться успехов в применении модели, новичкам придется затратить немало
времени: некоторым требуется несколько месяцев работы над соответствующим проек-
том, прежде чем их стиль мышления перестроится в нужном направлении. После приоб-
ретения опыта работать становится намного проще — в вас даже просыпается энтузиазм.
Через все это прошел и я, и все другие, кто так же одержим объектной парадигмой. Впро-
чем, сбросить груз привычек и сделать шаг вперед многим, к сожалению, так и не удается.