Сохранение модели домена - PullRequest
4 голосов
/ 25 марта 2009

Недавно закончили чтение Эрика Эванса «Доменно-управляемый дизайн» (очень информативно, очень приятно), однако пришли к первому крупному проекту с момента завершения книги и получили вопрос, как сохранить модель домена?

Я ценю использование служб / репозиториев и то, как они могут помочь модели, но как они справятся с сохранением модели?

Мои предыдущие сохранения модели домена будут соответствовать следующей структуре вызова метода:

ParentClass.Save {

ParentClassDB.Save

ChildObject1.Save

       ChildObject1DB.Save

ChildObject2.Save

       ChildObject2DB.Save  
  etc etc 

}

Служба контролирует вызов соответствующих процедур сохранения дочерних объектов?

Ответы [ 2 ]

6 голосов
/ 25 марта 2009

В DDD объект домена не заботится о его постоянстве. В идеале не должно быть метода Save().

Ваш репозиторий будет иметь такой Save метод, который принимает экземпляр сущности в параметре:

public class PersonRepository
{
   //...

   public void Save(Person person)
   {
      this.dataContext.Save(person);
   }

   //...
}

В зависимости от вашего стека ORM будет обрабатывать сохранение объекта, или вы закончите, создав запрос на сохранение человека, или вы заполните параметры хранимой процедуры значениями вашего экземпляра и т. Д.

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

1 голос
/ 25 марта 2009

Вы используете Совокупные корни? Они несут ответственность за спасение своих сущностей.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...