Могу ли я поместить все службы приложений во внешний интерфейс в DDD?

#domain-driven-design #web-application-design

#дизайн, управляемый доменом #дизайн веб-приложений

Вопрос:

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

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

Если ответ положительный, разумно ли, что размещение всех служб приложений во внешнем интерфейсе помогло бы снизить нагрузку на сервер и упростить иерархию (поскольку сам внешний интерфейс нуждается в уровне обслуживания), поскольку на стороне сервера не было бы уровня обслуживания приложений? Будут ли проблемы с безопасностью?

Ответ №1:

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

Комментарии:

1. Предполагается, что логика сохранения должна быть на прикладном уровне? Я новичок в ddd и в значительной степени запутался в деталях реализации.

2. Да, все проблемы инфраструктуры, такие как сохранение, должны находиться за пределами уровня домена, который является прикладным уровнем.

3.Согласно этим статьям thereformedprogrammer.net /… thereformedprogrammer.net /… , нет необходимости в уровне репозитория, поскольку логика сохранения может обрабатываться самими моделями домена.

4. @Alsein в статье рассматривается точка зрения исключения. Но большинство справочников по DDD, таких как «Шаблоны, принципы и практики проектирования, управляемого доменом», настоятельно рекомендуют не делать этого, поскольку это нарушает принципы DDD. Модель домена просто обрабатывает логику домена и является реализацией UL. Внутри этого не должно быть никаких технических проблем. Если вы удалите уровень репозитория, вы вставите логику сохранения внутри уровня домена, что сделает ваш серверный сервер менее обслуживаемым.