Возьмем домен, предложенный в разделе Эффективный совокупный дизайн продукта, который имеет несколько выпусков. В этой статье Вон приходит к выводу, что и Продукт, и Релиз должны быть собственными сводными корнями.
Теперь предположим, что мы добавляем функцию
- Как менеджер релизов я хотел бы иметь возможность сортировать релизы, чтобы составлять сроки для выпуска больших эпиков для наших пользователей
Я не продакт-менеджер с особыми потребностями, но кажется разумным, что они хотели бы иметь возможность сортировать выпуски в пользовательском интерфейсе.
Я не совсем уверен, как это должно работать. Для каждого Релиза естественно иметь свойство заказа, но изменение порядка потребует изменения нескольких агрегатов в одной и той же транзакции. С другой стороны, если эта информация хранится в агрегате Product, у вас должен быть такой метод, как product.setRelaseOrder(ReleaseId[])
, который кажется странным битом данных для хранения в совершенно другом месте, чем Releases. Хуже того, добавление релиза снова повлечет за собой модификацию двух разных агрегатов! Что еще мы можем сделать? ProductReleaseSortOrder может быть отдельным агрегатом, но это звучит просто абсурдно!
Так что делать? На данный момент я все еще склоняюсь к варианту «позволить продукту управлять им», но что здесь правильно?