Шаблон “Агрегат” из DDD¶
Агрегат — это кластер доменных объектов, с которыми можно обращаться как с единым целым. Он состоит из одной сущности и иногда одной или нескольких сущностей и объектов значений.

Агрегаты разбивают доменную модель на блоки, а также проясняют область применения операций, таких как загрузка, обновление и удаление. Эти операции распространяются на весь агрегат.
Агрегаты — это границы согласованности¶
Обновление целого агрегата, а не отдельных его частей решает проблемы с согласованностью. Операции обновления вызываются для корня агрегата, который обеспечивает соблюдение инвариантов.
Главное — определить агрегаты¶
В DDD ключевым аспектом проектирования доменной модели является определение агрегатов, их границ и корней. Детали внутренней структуры вторичны.
Правила для агрегатов¶
DDD требует, чтобы агрегаты подчинялись набору правил. Это делает их автономной единицей, способной обеспечить соблюдение инвариантов.
Правило 1. Ссылайтесь только на корень агрегата¶
Это правило требует, чтобы внешние классы могли ссылаться только на корневую сущность агрегата. Для обновления агрегата клиенту необходимо вызвать метод из его корня.
Правило 2. Межагрегатные ссылки должны применять первичные ключи¶
Правило состоит в том, что агрегаты ссылаются друг на друга по первичному ключу, а не по объектным ссылкам. Этот подход обеспечивает слабую связанность между агрегатами, а также позволяет чётко определить границы агрегата. Также при этом подходе возможно упростить хранение состояния, так как агрегат является единицей хранения.
Правило 3. Одна транзакция создает или обновляет один агрегат¶
Это правило гарантирует, что транзакция не выйдет за пределы сервиса, и хорошо сочетается с ограниченной транзакционной моделью NoSQL. Если системной операции нужно обновить несколько агрегатов, необходимо применять повествования.
Размеры агрегатов¶
С одной стороны, небольшой размер агрегата обеспечивает лучшую производительность и масштабируемость. С другой стороны, агрегат — это область применения транзакции, поэтому, чтобы обеспечить атомарность определенного обновления, иногда стоит делать агрегат более крупным.
Ссылки¶
https://microservices.io/patterns/data/aggregate.html
Дата создания : 16 июля 2022 г.