Вопрос проверяет понимание стратегического и тактического проектирования в Domain-Driven Design, что важно для построения масштабируемых и поддерживаемых доменных моделей.
В Domain-Driven Design система рассматривается через призму предметной области, а не технических слоёв. Чтобы большая модель не превратилась в хаос, её разбивают на ограниченные контексты — области, где термины и правила имеют одно конкретное значение.
Ограниченный контекст (Bounded Context) задаёт явную границу, внутри которой действует единый ubiquitous language. Один и тот же термин в разных контекстах может означать разное: например, «Клиент» в продажах и «Клиент» в поддержке — это разные модели.
Агрегат — это кластер связанных объектов, которые изменяются как единое целое. Корень агрегации (Aggregate Root) — единственная точка входа: внешний код обращается только к нему, а не к внутренним сущностям напрямую.
class Order { // Aggregate Root
private items: OrderItem[] = [];
addItem(productId: string, qty: number) {
if (qty <= 0) throw new Error('Invalid qty');
this.items.push(new OrderItem(productId, qty));
}
total(): number {
return this.items.reduce((s, i) => s + i.price(), 0);
}
}
// Внешний код работает только с Order, не с OrderItem напрямую
const order = new Order();
order.addItem('p1', 2);Ограниченные контексты и агрегаты решают разные задачи: первые — стратегическое разделение системы, вторые — тактическое управление согласованностью данных. Их совместное применение позволяет строить модульные системы, где изменения локализованы, а бизнес-правила защищены.
Уровень
Рейтинг:
4
Сложность:
8
Навыки
Бизнес-анализ
Сбор требований
Подпишись на Node.js Developer в телеграм