Разделение агрегата

Обсуждаем, как правильно строить приложения
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Разделение агрегата

Сообщение anton_z »

noLogicOnlyWar писал(а): 2017.12.28, 17:49 Мы хотим получить высокую связность между чем и чем? Если все инкапсулировать в 1 класс то и взаимодействовать он ни с кем не будет.
Да, от этого нас защищает противоположный принцип - low coupling. Чем больше в классе поведения, тем больше у него зависимостей, больше связей, тем он сложнее. Поиск баланса между низким уровнем связей (Low Coupling) и высокой связностью (High Cohesion) - одна из важнейших задач объектно-ориентированного проектирования.

Высокая связность должна быть между атрибутами класса User и поведением, которое работает с этими атрибутами. ООП и было изобретено, чтобы "объеднить" данные и поведение, которые существовали в процедурном подходе по отдельности как процедуры и структуры данных. Создавая такие вот доменные сервисы, опять приходим к этому разделению. Иногда действительно нет класса, которому можно назначить некоторое поведение и его необходимо синтезировать, но по-моему это не тот случай. Я так понял, что в рассматриваемом нами примере основной причиной желания вынести код в доменный сервис является как раз нежелание внедрять зависимости через конструктор в сущность пользователя, а не что-то другое.
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Разделение агрегата

Сообщение sda »

anton_z, а как вы собираете сущности у которых есть зависимости в конструкторе?
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Разделение агрегата

Сообщение anton_z »

sda писал(а): 2017.12.29, 19:34 anton_z, а как вы собираете сущности у которых есть зависимости в конструкторе?
Я не использую Docrine и Data Mapper. Я использую Active Record. В первом Yii получаю зависимости через Yii::app() в методе init() AR, это самый простой способ. В Yii 2.0.13 появилась возможность внедрять зависимости в AR через конструктор.
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Разделение агрегата

Сообщение sda »

noLogicOnlyWar, ну всё же я не нашел, чтобы вернон внедрял репозитории в сущность, тем более через конструктор. Я увидел только внедрение доменных сервисов и только в методы сущности (не в конструктор). Это действительно в некоторых ситуациях имеет смысл. Например можно вынести проверку емайла на уникальность в доменный сервис, а затем этот доменный сервис передать во все методы сущностей где по бизнес-логике требуется такая проверка. Насколько я понял, вы вроде так и делаете.
Ответить