Рассмотрим типичный пример Order и OrderItem . Предполагая, что OrderItem является частью Order Aggregate, он может быть добавлен только через Order. Итак, чтобы добавить новый OrderItem в Order, нам нужно загрузить весь Aggregate через репозиторий, добавить новый элемент в объект Order и сохранить Весь Агрегат снова.
Кажется, это накладные расходы. Что если наш Order имеет 10 OrderItems ? Таким образом, просто чтобы добавить новый OrderItem , мы не только должны прочитать 10 OrderItems , но мы также должны заново вставить все эти 10 OrderItems снова , (Это подход, который Джимми Нилсон использовал в своей книге DDD. Каждый раз, когда он хочет сохранить Агрегат, он очищает все дочерние объекты, а затем повторно вставляет их снова. Это может вызвать другие проблемы, так как идентификаторы детей меняется каждый раз из-за столбца IDENTITY в базе данных.)
Я знаю, что некоторые люди могут предложить применить шаблон «Единица работы» в Агрегированном корне, чтобы он отслеживал то, что было изменено, и фиксировал только эти изменения. Но это нарушает принцип постоянного невежества (PI), поскольку логика постоянства просачивается в модель предметной области.
Кто-нибудь думал об этом раньше?
Мош