Bounded contexts
Тема дорожной карты · Software Architecture
Bounded Context — это явная граница, внутри которой Ubiquitous Language действителен. В контексте продаж 'customer' может иметь совершенно иные атрибуты и поведение по сравнению с 'customer' в контексте поддержки. Это нормально, если граница между контекстами явна и перевод между ними осуществляется намеренно, с использованием антикоррупционных слоев и контекстных карт. Bounded Contextы играют важную роль в разработке программного обеспечения, особенно в больших проектах, где различные части системы могут иметь разные понятия о том же объекте.
Как это работает
Идентификация Bounded Context начинается с определения доменных границ, где каждая граница представляет собой уникальный контекст. Внутри каждого контекста используется свой Ubiquitous Language, который отражает уникальные аспекты бизнес-процесса. Каждый bounded context имеет свой модуль или сервис, свои таблицы базы данных и уникальный словарь терминов. Коммуникация между контекстами осуществляется через явный перевод, что обеспечивается антикоррупционными слоями (Anticorruption Layer), которые маппируют входящие концепции в локальный язык. Context Maps документируют отношения между контекстами, такие как Customer-Supplier, Shared Kernel, Partnership и другие.
Когда применять
Bounded Contextы необходимы, когда домен имеет естественные поддомены с пересекающимися, но различными словарями. Такой подход особенно полезен в B2B SaaS, где один 'user' или 'organisation' может быть 'lead' в маркетинге, 'customer' в биллинге и 'tenant' в операциях. Bounded Contextы менее важны в плотно определённых продуктах с одним консистентным доменом, где нет необходимости в разделении на различные контексты.
Типичные ошибки
- Один мега-контекст — отказ от деления из-за желания сохранить консистентность. Однако это приводит к фальшивой консистентности, которая в конечном итоге усложняет систему и приводит к купплению кода.
- Контексты без перевода — когда концепции протекают через границы без явного перевода. В этом случае граница становится номинальной, и система теряет контроль над своими границами.
- Технические разделения как bounded contexts — когда UI называют 'bounded context' отдельно от API. Это не разные домены, а разные технические слои. Bounded Contextы — это разделения на основе домена, а не технические.