Если конструктор выполняет всю эту работу, он знает о многих других объектах домена. Это создает проблему зависимости. Должен ли ticket
действительно знать о Customer
и HelpDesk
? Когда добавляются новые функции, разве маловероятно, что новые объекты домена будут добавлены в рабочий процесс, и не означает ли это, что нашим бедным ticket
придется знать о постоянно растущей совокупности объектов домена?
Проблема паутины зависимостей, подобной этой, заключается в том, что изменение исходного кода любого объекта домена повлияет на нашу бедную ticket
. ticket
будет обладать таким большим знанием системы, что независимо от того, что произойдет, ticket
будет вовлечен. Вы найдете неприятные операторы if
, собирающиеся внутри этого конструктора, проверяющие базу данных конфигурации, состояние сеанса и многое другое. ticket
вырастет в класс богов.
Еще одна причина, по которой мне не нравятся конструкторы, которые делают что-то, заключается в том, что это делает объекты вокруг них очень сложными для тестирования. Мне нравится писать много фиктивных объектов. Когда я пишу тест против customer
, я хочу пройти его по макету ticket
. Если конструктор ticket
контролирует рабочий процесс и танец между customer
и другими объектами домена, то маловероятно, что я смогу смоделировать его, чтобы протестировать customer
.
Я предлагаю вам прочитать Принципы SOLID , статью, которую я написал несколько лет назад об управлении зависимостями в объектно-ориентированных проектах.