digital-garden/dev/architecture/Bounded Context.md

44 lines
4.0 KiB
Markdown
Raw Normal View History

2024-11-24 20:43:38 +03:00
---
aliases:
- Ограниченный контекст
- ограниченных контекстов
- ограниченного контекста
tags:
- maturity/🌱
date: 2024-11-24
---
Ограниченный контекст (Bounded Context) — это ==логическая граница, внутри которой используется своя уникальная модель предметной области.== Он применяется в разработке для структурирования сложных систем, особенно когда бизнес-логика состоит из множества разрозненных частей.
Основные характеристики:
- **Локализация моделей:** Модель, используемая внутри одного контекста, не должна быть напрямую применима в других контекстах. Например, "Заказ клиента" в контексте управления складом может включать данные о весе и объеме, а в контексте бухгалтерии — только финансовую информацию.
- **Изоляция логики и терминологии:**. Один и тот же термин может означать разные вещи в разных контекстах. Например, "Клиент" в маркетинговом контексте — это целевая аудитория, а в контексте продаж — это покупатель с историей заказов.
- **Границы и ответственность:** Каждый контекст имеет свои четко определенные границы, и все, что относится к этому контексту (термины, сущности, события), остается внутри этих границ.
- **Интеграция контекстов:** Разные контексты взаимодействуют через явно определенные способы, такие как события, API, шины сообщений. Это позволяет минимизировать зависимость между контекстами.
Представим систему интернет-магазина. Возможные ограниченные контексты:
- **Каталог продуктов** — управление списком товаров и их характеристиками.
- **Управление заказами** — отслеживание состояния заказов.
- **Склад** — управление инвентарем и логистикой.
- **Бухгалтерия** — расчеты, счета и налоги.
Каждый из этих контекстов оперирует своей моделью данных и логикой, при этом данные могут пересекаться. Например, "Товар" есть в каталоге и на складе, но в каждом из контекстов он будет описан по-разному.
Польза
- [[../efficiency/Снижение когнитивной нагрузки при разработке|Снижение когнитивной нагрузки]] за счет локализации сложных моделей.
- Улучшение читаемости и тестируемости кода.
- Уменьшение зависимости между различными частями системы.
***
## Мета информация
**Область**::
**Родитель**::
**Источник**::
**Создана**:: [[2024-11-24]]
**Автор**::
### Дополнительные материалы
- [[Single Responsibility Principle]]
### Дочерние заметки
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->