Задать вопрос

DDD, Aggregate root без ORM, как сохранять?

public class Order
{
   List<OrderItem> Items {get; private set;}

   public AddItem(OrderItem item)
   {
       //логика  добавления

       items.Add(item);
   }
}

Следуя методологии DDD вся логика домена находится внутри домена и не выносится в отдельные сервисы. Вопрос в том как сохранять изменения корня агрегации не используя ORM, ну или используя microOrm - Dapper. Как делаете вы? как будет реализован метод OrderRepository.Save() или Update() если использовать паттерн repository или как будет реализована команда AddItemToOrderCommand если использовать паттер CQRS.
  • Вопрос задан
  • 1531 просмотр
Подписаться 8 Сложный 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
А что вам мешает сделать типичный репозиторий, часть методов которых будет переопределена или будут добавлены новые отсностиельно базового для роботы на прямую с SQL?
Ответ написан
NYMEZIDE
@NYMEZIDE
резюме - ivanfilatov.ru
Тогда вам придется (вместо Get и Save) реализовать репозиторий с методами

T Find(Guid id);
void Add(T item);
void Update(T item);
void Delete(T item);
Ответ написан
@ddd329
Без ORM, есть простые шаблоны. Твой репозиторий имеет метод Save, не важно обновил или создал новый АГРЕГАТ, все это передаешь методу Save, т.е. один метод вместо двух - Add и Delete. Допустим, ты обновляешь АГРЕГАТ, который состоит из трех сущностей, а в базе существуют три таблицы, т.е. каждая сущность маппиться на свою таблицу. Та сущнсость которая представляет корень АГРЕГАТА, будет использовать оператор UPDATE в SQL запросе, а дочерние сущности надо удалить (DELETE FROM..) и вставить заново(INSERT INTO). Все это делается в одной транзации базы данных, никакой вам Unit Of Work не нужен...

Попробуйте...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы