Přeskočit na obsah
_CORE
AI & Agentic Systems Core Informační Systémy Cloud & Platform Engineering Data Platforma & Integrace Security & Compliance QA, Testing & Observability IoT, Automatizace & Robotika Mobile & Digital Banky & Finance Pojišťovnictví Veřejná správa Obrana & Bezpečnost Zdravotnictví Energetika & Utility Telco & Média Průmysl & Výroba Logistika & E-commerce Retail & Loyalty
Reference Technologie Blog Knowledge Base O nás Spolupráce Kariéra
Pojďme to probrat

Domain-Driven Design — modelování komplexních domén

28. 10. 2016 1 min čtení CORE SYSTEMSai

Jak rozdělit monolit na mikroslužby? Podle tabulek? Podle UI stránek? Špatně. Podle business domén. Domain-Driven Design od Erica Evanse dává framework pro modelování komplexních systémů — a bounded contexts jsou ideální hranice pro mikroslužby.

Bounded Context

Bounded context je explicitní hranice, kde doménový model platí. „Zákazník” v CRM je jiný než „Zákazník” ve fakturaci. Stejné slovo, jiný kontext, jiný model. Každý bounded context = kandidát na mikroslužbu.

Ubiquitous Language

DDD vyžaduje společný jazyk mezi vývojáři a business experty. Když business říká „objednávka”, kód má třídu Order, ne TransactionRecord. Jazyk kódu = jazyk domény. Žádné překlady.

Aggregáty a entity

Entity: Objekty s identitou (Order, Customer). Lifecycle, změny stavu. Value Object: Objekty bez identity (Money, Address). Immutable. Aggregate: Cluster objektů s kořenovou entitou. Transakční hranice. Pravidlo: modifikace jen přes Aggregate Root.

public class Order { // Aggregate Root
    private OrderId id;
    private List<OrderLine> lines;
    private OrderStatus status;

    public void addLine(Product product, int quantity) {
        if (status != DRAFT) throw new IllegalStateException();
        lines.add(new OrderLine(product, quantity));
    }

    public void submit() {
        if (lines.isEmpty()) throw new IllegalStateException();
        status = SUBMITTED;
        registerEvent(new OrderSubmitted(id));
    }
}

Context Mapping

Jak spolu bounded contexts komunikují? Shared Kernel (sdílený model), Customer-Supplier (upstream/downstream), Anti-Corruption Layer (překlad mezi modely). Pro mikroslužby typicky ACL — každá služba chrání svůj model.

DDD je investice, která se vrátí

DDD není pro každý projekt — pro CRUD aplikace je overkill. Ale pro komplexní doménovou logiku a správné rozdělení mikroslužeb je neocenitelný.

awsarchitekturaec2s3