Могу ли я удалить совокупность корней в одной транзакции?
Когда я читал главу об агрегатах в реализации доменно-управляемого проектирования, я понял, что, как правило, не следует изменять несколько агрегатных экземпляров в одной транзакции.
Позже в главе, посвященной реализации репозитория, я обнаружил, что метод removeAll определен в интерфейсе репозитория, после чего я запутался: не вызывает removeAll, другими словами, удаляет несколько агрегатов из репозитория, нарушая правило, изменяющее только один экземпляр агрегата в одна транзакция?
1 ответ
Это зависит.
Лично я бы посчитал запахом дизайна, если пользователь удаляет сразу несколько агрегатов, именно по той причине, о которой вы заявляете.
С другой стороны, я часто вижу фоновые задания, которые убирают вещи. Нередко иметь removeAll
функциональность в том смысле, о котором вы спрашиваете в таком коде.
Причина, по которой существует правило "Изменение только одного агрегата на транзакцию", проста: агрегаты - это концепция, которая определяет границы согласованности, поэтому каждый раз, когда вы нарушаете одно правило агрегата, вы работаете против своего собственного дизайна. Вот почему у вас должна быть веская причина нарушить правило, иначе не делайте этого.