Подтвердить что ты не робот

Как избежать аномального уровня домена и по-прежнему иметь богатые проверки и бизнес-правила

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

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

Я всегда расслаблялся и разрешал доступ из домена в репозиторий, используя DI. Я не видел четких примеров того, как иметь "чистый" уровень домена в сложном приложении, который также не является анемичным, и имеет уровень сервиса/приложения, делающий все ворчание и возиться с тем, что должно быть внутренними объектами домена.

4b9b3361

Ответ 1

  • Если объект является объектом значения, он должны быть неизменными и проверенными во время строительства.

  • Если объект является корневым агрегатом, а его собственного состояния достаточно, чтобы сказать вам если он действителен или нет, вы можете добавить метод проверки на нем, который каскады через агрегацию.

  • Наконец, и я думаю, что это ваш главный если вам нужно получить доступ несколько связанных объектов ( не в том же совокупности) для обеспечения один из них действителен, вы окончательно необходимо депортировать это логики в конкретной службе проверки.

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

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

Ответ 2

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

ответ также ссылается на другие полезные ресурсы.

Удачи и не стесняйтесь пишите мне или спрашивайте меня о DDD и избегайте моделей Anemic. Это интересная тема, когда люди склонны решать это по-разному.