Как определить совокупные корни из реляционной модели, чтобы использовать ее для DDD?
Я довольно долго смотрел на другие посты относительно корней совокупностей. Кажется, я совсем не понимаю, как правильно определить совокупность корней. Я видел ответы, такие как корни агрегатов, возможно, не корни агрегатов, и наоборот. Я немного смущен. Проблема в том, что у меня в голове реляционная модель, но я знаю, что DDD не пойдет по этому пути.
Есть ли способ определить совокупные корни из реляционной модели?
Например, если у вас есть журнал, содержащий записи журнала, в каждой из которых содержатся задачи, проблемы и заметки
Как бы вы определили корни агрегатов? Является ли корень журналом? но это может вызвать проблемы, если вы хотите получить доступ к заметкам, проблемам и задачам. Таким образом, эти также объединяют корни, которые содержат ссылку на записи журнала?
Это что-то сложное для понимания, и я хотел бы получить больше разъяснений.
Благодарю.
1 ответ
Я согласен с вами, что концепция совокупных корней может сбивать с толку, пока вы не решите ее. Как и большинство других концепций, с практикой это становится легче, прорабатывая это несколько раз.
Задача агрегата состоит в том, чтобы упростить обход объекта для некоторого внешнего объекта в контексте одного или нескольких вариантов использования. Вы должны начать где-нибудь, чтобы удовлетворить бизнес-требования, и если вы обнаружите, что вам в значительной степени нужен журнал, это похоже на то, что он на самом деле должен быть совокупным корнем. В большинстве доменов, которые не являются тривиальными, вам будет полезно иметь более одного совокупного корня. В исходном объекте для варианта использования нет ничего сверхъестественного. Вам просто нужно с чего-то начать.
Но опять же, дело в том, чтобы упростить обход объектов, что упрощает вашу систему. Так что, если журнал на самом деле является полезной отправной точкой, сначала сделайте все ваши звонки в журнал. Если в конкретном случае использования потребуются Задачи, Деньги, Время или любые другие полезные вещи, вызывающая программа получает эти вещи, запрашивая журнал, и только журнал. Другие объекты являются частью объединенного корня Журнала, для этого варианта использования.
Для других вариантов использования может быть более естественным и поэтому полезным, чтобы Задача была отправной точкой, и поэтому у вас также может быть корень агрегата Задачи, который, вероятно, будет перекрывать ваш корень сценариев использования журнала. Но вы просите Task и только Task удовлетворить запрос (быть единственной ссылкой, о которой должна знать вызывающая программа)
Ваш реляционный БД может и будет оставаться реляционным, конечно. Но благодаря тому, что ваша объектная модель будет развиваться, чтобы рассматривать запросы с точки зрения совокупности (объект начальной точки), ваши запросы из БД будут проще.
Выложите вариант использования (или два) и попробуйте разобраться. Задавайте вопросы в контексте варианта использования, если хотите.
НТН,
Berryl