Gymterview
middle

Что такое Bounded Context и как он связан с микросервисами?

Bounded Context (ограниченный контекст) — это центральная концепция Domain-Driven Design, обозначающая границу, внутри которой определённая модель предметной области является согласованной и единообразной.

Аналогия из жизни: в разных отделах банка слово «клиент» означает разное. Для отдела продаж — это лид с контактами, для кредитного — заёмщик со скоринговым баллом, для платёжного — владелец счёта. Каждый отдел — это свой Bounded Context.

В разных контекстах одно и то же понятие может иметь разное значение. Например, «Клиент» в банковской системе:

  • В контексте продаж — это лид с контактными данными и историей взаимодействий.
  • В контексте кредитования — это заёмщик с кредитной историей и скоринговым баллом.
  • В контексте платежей — это владелец счёта с реквизитами.

Каждый контекст имеет свою модель «Клиента», и это нормально. Попытка создать единую модель для всех контекстов приводит к «Большому комку грязи» (Big Ball of Mud).

Связь с микросервисами: один Bounded Context, как правило, соответствует одному микросервису (или группе тесно связанных сервисов).

Пример кода: разные модели клиента в разных контекстах
// Контекст "Платежи" — своя модель клиента
package com.bank.payment.domain;

public class PaymentCustomer {
    private Long id;
    private String accountNumber;
    private BigDecimal balance;
    // Здесь нет данных о кредитной истории — они не нужны
}

// Контекст "Кредитование" — своя модель клиента
package com.bank.credit.domain;

public class CreditCustomer {
    private Long id;
    private CreditScore creditScore;
    private List<CreditHistory> history;
    // Здесь нет данных о балансе счёта
}

Context Map

Context Map — диаграмма, показывающая взаимосвязи между контекстами:

  • Shared Kernel — общий код между контекстами (минимизировать!).
  • Customer-Supplier — один контекст является потребителем данных другого.
  • Anti-Corruption Layer (ACL) — слой адаптации между контекстами, предотвращающий загрязнение модели чужими концепциями.
  • Published Language — формальный язык обмена данными (например, события в Kafka).

На собеседовании: связка «Bounded Context = микросервис» — это ключевой инсайт. Также упомяните Anti-Corruption Layer — он показывает, что вы понимаете, как защитить свою модель от чужих абстракций.