2016-01-20 7 views
5

Мне сложно решить, должно ли что-то быть частью домена или приложения.DDD: Что входит в домен и что входит в приложение?

Чтение через это answer помогает с такими понятиями, как авторизация, но я все еще сталкиваюсь с другими вещами.

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

  • Убедитесь роль пользователя/статус разрешено комментировать этот пост (авторизация, идет к применению)
  • Убедитесь, что пост, к которому мы комментирование существует и опубликован (домен)
  • Убедитесь, что пользователь не добавил более 5 комментариев в последнюю минуту (дросселирование, интуиция говорит, что оно идет в приложение)
  • Удостоверяются, что комментарий не является пустой строкой (Домен)
  • Удостоверьтесь, что у комментариев нет грязных слов (Домен?)
  • Убедитесь, что комментарий не имеет дубликатов от того же пользователя на этом посту (домен?)
  • Формат комментарий (Application)
  • Удалите некоторые HTML-теги из комментариев, которые не разрешены для текущего пользователя (Application)
  • Check комментарий для спама (заявка?)

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

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

Моя текущая настройка делает это:

Controller -> App.CommentingService.Comment() -> Domain.CommentingService.Comment()

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

ответ

3

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

Возможности приложения: Уведомления по электронной почте, Авторизация, Постоянство и т. Д. Все функции, помимо домена, поступают сюда.

Координация приложения: для удовлетворения прецедента вам нужны координаты функций приложения и домена. Вся сантехника приходит сюда.

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

Controller 
    App.CommentingService.Comment() //coordination of below features and domain 
     App.AuthService().Autorize(); //feature 
     Domain.CommentingService.Comment(); //domain 
     App.PersistenceService().Persist(); //feature 
     App.NotificationService().SentNotificationToUser(); //feature 

Почему я не могу просто сделать все это в приложении, чтобы уменьшить путаницу?

Относительная сегрегация, свободная муфта, инация зависимостей и т. Д .; все это хорошо по многим причинам. Я дам вам реальный пример, который я недавно участвовал: наличие сборки свободных узлов (это было в .NET framework) с помощью только служб домена, позволяет мне размещать один и тот же домен без изменений в веб-приложении, DesktopApp и веб-службе SOAP просто меняя службы координации приложений, поскольку требования и варианты использования различны для каждого приложения.

О том, что входит в домен, а что нет. Очень сложно дать вам прямой ответ, потому что это зависит от того, что является вашим доменом или нет.

т.е.

Убедитесь пользователь не добавлял более 5 комментариев в последнюю минуту

Вы должны задаться вопросом, почему вы дросселирования? Чтобы предотвратить беспорядочный интерфейс? Почему? Предотвратить угрозу отказа в обслуживании? Или нарушает правило в вашей «игре», потому что ваша «игра» просто дает ограниченным попыткам пользователя во время спама? Это то, что указывает, что что-то является Доменом или Приложением.

+0

Дросселирование - это обеспечение того, чтобы спамеры могли содержаться. Кроме того, проверяет, содержит ли комментарий спам-ссылки для домена? Я хотел бы, чтобы это произошло независимо от того, было ли это в веб-приложении, веб-службе SOAP или настольном приложении. То же самое касается дросселирования. –

+0

Я думаю, что ваш ответ действительно хорош. Это заставило меня задуматься о каждом требовании, когда я спросила себя: «Будет ли домен сломан, если это правило не будет применено?». Поэтому для большинства из них ответ отрицательный. Домен остается неповрежденным, если не задействованы дросселирование, повторяющиеся комментарии, грязные слова, формат, теги html или даже авторизация. Наша безопасность приложений, производительность, удобство, презентация могут завершиться неудачно, но домен будет по-прежнему правильным. Комментарии все равно будут загружаться и работать отлично, хотя и с грубыми словами и уродливым форматированием. –

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^