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

Доменные службы и приложения

В чем основное отличие между службами домена и приложения? (Я использую NHibernate)

Какой слой будет лучше для бизнес-логики? Какая передовая практика?

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

4b9b3361

Ответ 1

Ваш пробег может очень сильно, но я постараюсь определить, как я их использовал. Независимо от вашего уровня персистентности, я бы определил их для практического использования как:

  • Доменные службы. Службы, которые существуют для обеспечения целостности домена и облегчают вставку, создание, удаление и извлечение данных из домена. Кроме того, службы домена могут организовывать комбинации доменных объектов более высокого уровня в виде моделей. Часто это фасады поверх репозиториев, которые работают, чтобы скрыть некоторые из низкоуровневых реализаций и предоставить интерфейс в соответствии с UL (вездесущим языком), чтобы помочь в управлении ожиданиями.

  • Службы приложений. - Услуги, которые специфичны для реализации модели домена или не имеют зависимости от модели домена. Классическим примером этого может быть отправка и электронная почта на основе изменения состояния или действия в домене. Обычно это требование самого приложения и, скорее всего, не определяется моделью домена. Это может быть процедурно выполнено службой приложений после вызова службы домена или как событие, поднятое из службы домена.

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

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

Проблема действительно занимает время, чтобы определить, что является истинной "проблемой для домена". Например, пользователь может не опубликовать комментарий к произвольному приложению, если его адрес электронной почты не известен. Вы можете утверждать, что это относится к любому слою. Ключ действительно согласован.

Ответ 2

Я думаю, что сообщение, которое @Karsten цитирует в своем комментарии, более аутентично, чем самый верный ответ, который опубликовал здесь @joseph.ferris.

Службы домена предназначены для "значительного процесса или преобразования в домене, который не является естественной ответственностью объекта ENTITY или VALUE OBJECT" (проект Eric Evans Domain-Driven Design).

Службы приложений - это просто своего рода фасад или API для вашего приложения (или других внешних потребителей), они обычно соответствуют варианту использования приложения и представляют собой набор прикладных операций, требуемых интерфейсом клиентских слоев. Они не будут содержать бизнес-логику или что-нибудь, что эксперты домена могут прийти однажды и попросить изменить. Они могут содержать управление транзакциями (единицу работы), проверку приложений (проверять состояние объектов, полученных из базы данных/ввода, сохраненных в базе данных), проверки безопасности и сквозные задачи, такие как ведение журнала, кэширование и т.д., А также организовать объекты домена в режиме просмотра. Они особенно полезны, когда у вас несколько клиентов (например, веб-API и MVC), а ответы на варианты использования включают в себя несколько транзакционных ресурсов (см. Раздел "Уровень сервиса" в "Шаблоны архитектуры корпоративных приложений" Мартина Фаулера).

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

Ответ 3

  • Доменные службы - это службы внутри домена, состоящие из нескольких классов, которые необходимо повторно использовать.

    • Службы приложений - это классы, в которых технический персонал работает, например, для обмена сообщениями или сообщениями sms.

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