Домен-управляемый дизайн сбивает с толку - PullRequest
0 голосов
/ 10 января 2012

1) Что такое BLL-services?В чем разница между ними и Service Layer сервисами?Что относится к доменным службам, а что к служебному слою?

2) Как я реорганизую модель BBL, чтобы придать ей такое поведение: Post сущность содержит набор отзывов, которые уже позволяют добавлять еще Feedback через feedbacks.Add(feedback).Очевидно, что нет никаких расчетов в простом приложении блога.Должен ли я определить метод для добавления Feedback внутри Post сущности?Или это поведение должно поддерживаться соответствующей службой?

3) Должен ли я использовать шаблон Unit-Of-WorkUnitOfWork-Repositories), как он описан в http://www.amazon.com/Professional-ASP-NET-Design-Patterns-Millett/dp/0470292784, или этого будет достаточно для использования NHibernate ISession

Ответы [ 3 ]

3 голосов
/ 10 января 2012

1) Business Layer и Service Layer на самом деле являются синонимами.«Официальный» термин DDD - Application Layer.

Роль Application Layer заключается в координации работы между Domain Services и Domain Model.Это может означать, например, что функция Application сначала загружает объект через Repository, а затем вызывает метод для объекта, который будет выполнять фактическую работу.

2) Иногда, когда ваше приложение в основном управляется даннымиСоздание полноценного Domain Model может показаться излишним.Однако, на мой взгляд, когда вы привыкаете к Domain Model, это единственный путь, по которому вы хотите идти.

В случае Post и Feedback вам нужен метод AddFeedback(Feedback) изНачиная с того, что это приводит к меньшей связности (вам не нужно знать, хранятся ли элементы FeedBack в, например, List или в Hashtable), и это даст вам хорошую точку расширения.Что, если вы когда-нибудь захотите добавить проверку, что разрешено не более 10 Feedback элементов?Если у вас есть метод AddFeedback, вы можете легко добавить проверку в одну точку.

3) Шаблон UnitOfWork и Repository являются фундаментальной частью DDD.Я не эксперт NHibernate, но всегда полезно скрывать детали интерфейса за интерфейсом.Это уменьшит сцепление и улучшит тестируемость.

3 голосов
/ 10 января 2012

Я предлагаю вам сначала прочитать книгу DDD или ее короткую версию , чтобы получить общее представление о строительных блоках DDD. Нет такой вещи как BLL-Сервис или Сервис сервисного уровня. В DDD у вас есть

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

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

В любом случае, когда кажется, что операция идеально вписывается в сущность с точки зрения домена (например, добавление отзыва к сообщению, которое переводится в Post.AddFeedback () или Post.Feedbacks. Добавьте () ), я всегда иду на это, а не на добавление Сервиса, который только рассеивает поведение в разных местах и ​​постепенно приводит к анемичной модели предметной области. Могут быть исключения, например, когда добавление отзыва к сообщению требует установления связей между многими различными объектами, но здесь это явно не так.

1 голос
...