Помните, что агрегаты и, как следствие, ограниченный контекст (B C), представляют собой группу данных и бизнес-логи c, которые принадлежат друг другу (и, скорее всего, вещи, которые необходимо изменить транзакционно). Данные, которые содержит агрегат, присутствуют потому, что они нужны бизнес-логике c, а не потому, что это нужно некоторым экранам приложений. Это очень важно, чтобы устранить некоторую путаницу и освободить вас от некоторых ограничений для проектирования ваших агрегатов.
Например, когда вы отображаете историю болезни для пользователя, вы можете указать имя пациента, адрес, возраст и т. Д., А также цены на лечение, но если вы подумаете об этом, вы не Мне не нужно ничего из этого, чтобы управлять историей болезни. Из того, что вы говорите, в истории болезни есть номер записи, идентификатор пациента и список идентификаторов лечения, возможно, с датами, когда они были сделаны.
Если вы хотите отобразить историю болезни для пользователя, вы можете использовать UI Composition. Итак, вы получаете историю болезни (которая в основном представляет собой набор идентификаторов и дат). Затем из PatientId истории болезни вы можете получить информацию о пациентах из B C, которому она принадлежит. С помощью «Идентификаций лечения» вы можете получить описания процедур от какого-либо B C, которому он принадлежит, и их цены от B C, к которому они принадлежат.
Таким образом, исходя из этого, вы можете строить свои агрегаты не на основе «соответствующих имен» в вашем домене, таких как «Пациент», «Лечение» или «Стоматолог», а на основе бизнес-логики c, которую они реализуют.
Это просто дикие догадки, но я могу думать о:
B C Маркетинг (из-за отсутствия лучшего названия): Содержит описания всех методов лечения, информацию о стоматологах, Информация о номерах и материалах и др. c. Итак, тексты, фотографии и другие детали.
B C Финансы: содержит информацию о ценах на каждое лечение, платежные записи каждого платежа, кредиты и дебеты каждого пациента и т. Д. c. Отвечает за отслеживание всех этих вещей. Например, он может знать, когда лечение начинается / заканчивается и, в зависимости от истории болезни пациента, требует 50 или 100% оплаты. Здесь нет необходимости иметь прямое отношение к истории болезни, нужно только знать, является ли это первым лечением или нет.
B C Планирование: отвечает за планирование новых процедур и отслеживание их начала и окончания sh. Это может содержать историю или потенциально может быть где-то еще, если это необходимо.
B C Медицина: отвечает за ведение всех медицинских карт, аллергий, медицинских данных о состоянии зубов и т. Д. c.
B C Уход за пациентами: отвечает за отслеживание информации о пациентах, имени, национальности, контактных данных и т. Д. c.
Когда у вас есть представление об ограниченном контексте, вы можете определить агрегаты. Может быть один или несколько на B C. Кроме того, некоторые вещи могут не быть совокупными. Например, история болезни может не требовать фактической совокупности, если это, в основном, запись идентификаторов лечения и дат, в которые они были сделаны, и нет связанных бизнес-логи c (история не собирается отрицать лечение, есть мнения о том, когда лечение должно произойти и так далее, это просто история).
Не воспринимайте это как рекомендуемый дизайн, а просто как мыслительный процесс, чтобы придумать собственное решение.