Вопрос

Недавно закончил читать Eric Evans Domain Driven Design (очень информативный, очень приятный), однако перешел к первому крупному проекту с момента завершения книги и столкнулся с вопросом, как справиться с сохранением модели домена?

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

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

Родительский класс.Сохранить {

База данных родительского класса.Сохранить

Дочерний объект1.Сохранить

       ChildObject1DB.Save

Дочерний объект2.Сохранить

       ChildObject2DB.Save  
  etc etc 

}

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

Это было полезно?

Решение

В DDD объект домена не заботится о своей сохраняемости.У вас не должно быть Save() метод на нем, в идеале.

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

public class PersonRepository
{
   //...

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

   //...
}

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top