Объекты области и сервисы

23
задан Community 23 May 2017 в 10:31
поделиться

3 ответа

Это Загадка электронной таблицы : делает номеронабиратель номер телефона, или номер телефона набирает себя по телефону ?

Вы могли бы найти Двойная Отправка быть интересным чтением, хотя излишество в Вашей ситуации, я считаю .

Единственный Принцип Ответственности часто противоречащий принципу OO из , Говорят, не Спрашивайте . Мое чувство на предмете колебалось, и я обосновался на следующих условиях, когда логика должна войти в объект области:

В Вашей ситуации, я выбрал бы против помещения вызова к сервису в объекте объекта, главным образом потому что сервис не кажется, что это связано с Вашим доменом, но более связанное с персистентностью. Объекты области должны быть связаны с доменными понятиями, и я не думаю сервис, который Вы дали, квалифицирует.

пример, где я думаю, называя сервис в объекте, мог бы быть приемлемым, был бы то, если бы Ваше приложение использовало сторонний сервер рабочего процесса для управления частями его состояния. По существу это Шаблон состояния с состояниями, определенными во времени выполнения.

я думаю, что приемлемо иметь domainObject.moveToNextState () (предполагающий, что этот код "имеет смысл" на Вашем повсеместном языке), называют сервис, который говорит с Вашим сервером, потому что сервер рабочего процесса управляет частью модели предметной области.

я добавлю, что DDD очень интересно со следующим язык домена. Вы слышите, что специалисты по проблемной области говорят, что "Пользовательское изображение находит, соответствует ли его печать ползунка тем в сервисе поставщика XYZ"? Или они говорят, что "Сервис поставщика XYZ, учитывая печать ползунка, указывает, существует ли та печать ползунка"? Пойдите с тем, который имеет большую часть смысла в Вашем домене.

еще Некоторые мысли (я думал об этой проблеме много, потому что это является центральным для разработки):

  • В книге Evans DDD, объект Учетной записи имеет методы как кредит (Сумма), дебет (Сумма), transferTo (Учетная запись, Сумма), и накопитесь (), но FundsTransferService имеет передачу (Учетная запись, Учетная запись, Сумма) метод. transferTo метод не называет сервиса, но просто обрабатывает логику, которая включает Учетные записи, как кредитование и дебетование правильных сумм.

    FundsTransferService, в дополнение к координации, имеет свои собственные правила проверить, правила, которые не вписываются в Учетные записи. Точная сумма к кредиту или дебету могла бы вовлечь внешние стороны. Это делает неудобным для transferTo назвать сервис.

  • Для простых объектов, как UserImage, значительная доменная логика, которая может поместиться в сам объект, могла бы быть недостаточной, потому что это не, насколько я могу сказать, Агрегат. Агрегируется, я думаю, представляю больше возможности содержать доменную логику. Пример Учетной записи вероятен Агрегат.
46
ответ дан Community 29 November 2019 в 01:41
поделиться

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

2
ответ дан Otávio Décio 29 November 2019 в 01:41
поделиться

Если Вы позволяете Объекту Объекта назвать сервис, это выполняет два ролевых Объекта данных и Объект службы. Обычно каждый объект должен иметь на ответственности, не только в реализации, но также и в использовании.

В Вашем случае, непритязательный UserImage, кажется, и Изображение и Устройство распознавания ThumbPrint.

0
ответ дан Allain Lalonde 29 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: