2015-01-26 7 views
0

Я в здании приложение, которое будет разоблачать часть своих функций через RESTful услуг и мои пакеты прикладных программ организована нижеDDD Заполнители Validation

  1. Application -> Этот пакет содержит RESTfull услуги
  2. Модель - -> содержит модель предметной области агрегатов, Value Objects, ...
  3. Инфраструктура -> содержит набор классов, необходимых для доступа к базе данных
  4. Монго DB -> Мой DB

Пакет приложений предоставляет конечной точке

CastReview(UUID reviewedEntityId, string review) 

Представлен обзор извлеченный из тела запроса и является обязательным.

Теперь мой вопрос, где проверка должна произойти

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

  2. Или я должен иметь подтверждение внутри пакета прикладных программ, а также внутри совокупности

ответ

3

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

Некоторые правила - это, очевидно, инварианты домена, поскольку вам необходимо иметь глубокие знания об агрегированных данных для их принудительного применения, а некоторые из них являются определенно применимыми правилами (например, подтверждение по электронной почте = электронная почта). Но иногда линии размыты. Я бы определенно проверил на клиентском и прикладном уровне, что обзор не является нулевым или пустым, и в то же время я бы не рассмотрел Review Агрегат ОК, если он имеет нулевой обзор, поэтому я бы сделал и то, и другое. Но это может быть зависимым от домена и YMMV.

1

Ограничения на целостность (или «инварианты», если вы предпочитаете этот термин) должны быть определены в модели (domain/design/data). Затем они должны быть проверены несколько раз:

  1. В фронтальном пользовательском интерфейсе (на вход/изменениях и на представить) для получения отзывчивых проверок.
  2. В фоновом приложении или инфраструктуре перед сохранением.
  3. И в СУБД (перед фиксацией), если ваша БД используется совместно с другими приложениями.

См. Также мою статью Integrity Constraints and Data Validation.

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