Как определить совокупные корни из реляционной модели, чтобы использовать ее для DDD?

Я довольно долго смотрел на другие посты относительно корней совокупностей. Кажется, я совсем не понимаю, как правильно определить совокупность корней. Я видел ответы, такие как корни агрегатов, возможно, не корни агрегатов, и наоборот. Я немного смущен. Проблема в том, что у меня в голове реляционная модель, но я знаю, что DDD не пойдет по этому пути.

Есть ли способ определить совокупные корни из реляционной модели?

Например, если у вас есть журнал, содержащий записи журнала, в каждой из которых содержатся задачи, проблемы и заметки

Как бы вы определили корни агрегатов? Является ли корень журналом? но это может вызвать проблемы, если вы хотите получить доступ к заметкам, проблемам и задачам. Таким образом, эти также объединяют корни, которые содержат ссылку на записи журнала?

Это что-то сложное для понимания, и я хотел бы получить больше разъяснений.

Благодарю.

1 ответ

Решение

Я согласен с вами, что концепция совокупных корней может сбивать с толку, пока вы не решите ее. Как и большинство других концепций, с практикой это становится легче, прорабатывая это несколько раз.

Задача агрегата состоит в том, чтобы упростить обход объекта для некоторого внешнего объекта в контексте одного или нескольких вариантов использования. Вы должны начать где-нибудь, чтобы удовлетворить бизнес-требования, и если вы обнаружите, что вам в значительной степени нужен журнал, это похоже на то, что он на самом деле должен быть совокупным корнем. В большинстве доменов, которые не являются тривиальными, вам будет полезно иметь более одного совокупного корня. В исходном объекте для варианта использования нет ничего сверхъестественного. Вам просто нужно с чего-то начать.

Но опять же, дело в том, чтобы упростить обход объектов, что упрощает вашу систему. Так что, если журнал на самом деле является полезной отправной точкой, сначала сделайте все ваши звонки в журнал. Если в конкретном случае использования потребуются Задачи, Деньги, Время или любые другие полезные вещи, вызывающая программа получает эти вещи, запрашивая журнал, и только журнал. Другие объекты являются частью объединенного корня Журнала, для этого варианта использования.

Для других вариантов использования может быть более естественным и поэтому полезным, чтобы Задача была отправной точкой, и поэтому у вас также может быть корень агрегата Задачи, который, вероятно, будет перекрывать ваш корень сценариев использования журнала. Но вы просите Task и только Task удовлетворить запрос (быть единственной ссылкой, о которой должна знать вызывающая программа)

Ваш реляционный БД может и будет оставаться реляционным, конечно. Но благодаря тому, что ваша объектная модель будет развиваться, чтобы рассматривать запросы с точки зрения совокупности (объект начальной точки), ваши запросы из БД будут проще.

Выложите вариант использования (или два) и попробуйте разобраться. Задавайте вопросы в контексте варианта использования, если хотите.

НТН,
Berryl

Другие вопросы по тегам