44 lines
4.0 KiB
Markdown
44 lines
4.0 KiB
Markdown
|
---
|
|||
|
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) -->
|
|||
|
|