Коллекция доменных объектов в доменной модели - PullRequest
4 голосов
/ 14 декабря 2009

Это может быть основной вопрос, но я довольно плохо знаком с DDD. У меня есть доменный объект, который мы назовем Adjustment, который можно обработать массово из пользовательского интерфейса. Перед обработкой корректировок нам необходимо проверить дату, когда эти корректировки будут применены. Моя проблема связана с расположением этого метода IsValidDate () в моем доменном объекте.

  1. Должен ли это быть статический метод в классе корректировки?
  2. Должен ли он быть частью класса AdjustmentService?
  3. Должен ли я создать объект домена AdjustmentsGroup, содержащий коллекцию корректировок и который бы также реализовывал IsValidDate?

Я бы подумал, что третий вариант - лучший, но мне трудно подумать о доменном термине для группы объектов корректировки. Можно ли форсировать объект домена типа контейнера для этого типа сценария? Есть ли распространенная практика для этого?

Спасибо

Редактировать: IsValidDate фактически содержит бизнес-логику. Это не просто метод проверки даты

Ответы [ 3 ]

2 голосов
/ 14 декабря 2009

Я бы проголосовал за 2) Сделать это DomainService . Код для его реализации может быть либо в классе DomainServices, либо в классе AdjustmentServices, либо в классе ValidateAdjustmentService, в зависимости от того, какие другие сервисы находятся в модели предметной области, и что наиболее целесообразно с организационной точки зрения.

Другой вариант, (если правила, внедренные этой службой, являются бизнес-правилами), заключается в том, чтобы реализовать это как СПЕЦИФИКАЦИЮ. (Проверьте страницы 224 - 240 в DDD)

1 голос
/ 14 декабря 2009

Я предпочел бы третий вариант, но создайте make более универсальную функцию в Adjustment, такую ​​как Validate (), которая будет возвращать набор ошибок / ошибок проверки сам по себе. Таким образом, вы можете добавить правила проверки позже, не меняя интерфейс. Функция Validate () в AdjustmentsGroup будет просто вызывать Validate () для каждого члена коллекции. В равной степени действительным (без каламбура) способом было бы также иметь отдельный класс валидатора для объекта, который содержит всю логику валидации.

Ваш AdjustmentService затем вызовет Validate () для AdjustmentsGroup перед обработкой корректировок.

1 голос
/ 14 декабря 2009

Если вы выполняете простую проверку строки «это на самом деле дата», то правильное место для этого метода, по моему мнению, находится внутри класса Service, как предложил Чарльз.

Однако, если данные в объектах Adjustment или AdjustmentCollection могут изменить логику проверки даты, например, Запрещая определенные диапазоны дат, метод принадлежит этому объекту.

...