DDD: Domain-Driven Design

Ako navrhovať softvér okolo biznisu, nie okolo technológie

Domain-Driven Design (DDD) je prístup k vývoju softvéru, ktorý kladie dôraz na dôkladné pochopenie domény – teda problémovej oblasti, ktorú softvér rieši. DDD prepája vývojárov, analytikov a biznis jedným spoločným jazykom a pomáha tvoriť aplikácie, ktoré sú prehľadné, stabilné a dobre škálovateľné.


Čo je doména?

Doména predstavuje oblasť, ktorú softvér rieši. Môže to byť napríklad bankovníctvo, logistika, e-commerce, zdravotníctvo či rezervačné systémy. DDD hovorí, že najprv musí vývojár pochopiť biznis, až potom môže navrhnúť vhodný softvér.


Ubiquitous Language – spoločný jazyk

Všetky tímy (biznis, analytici, vývojári) používajú rovnaké pomenovania. Tento jazyk sa premieta priamo do kódu.


public class Order { }
public class OrderSubmittedEvent { }
public interface IOrderRepository { }

DDD Building Blocks

1. Entity

Entity je objekt, ktorý má identitu – je unikátne identifikovateľný.


public class Device
{
    public Guid Id { get; }
    public string Name { get; private set; }
}

2. Value Object

Value object nemá identitu a reprezentuje hodnotu. Je nemenný.


public record Temperature(double Value, string Unit);

3. Aggregate

Aggregate je skupina entít a value objektov, ktorá tvorí logický celok. Každý aggregate má svoj Aggregate Root, ktorý zodpovedá za konzistenciu.

4. Repository

Repository je abstrakcia nad úložiskom dát. Poskytuje metódy na načítanie a uloženie agregátov.


public interface IDeviceRepository
{
    Task GetByIdAsync(Guid id);
    Task SaveAsync(Device device);
}

5. Domain Events

Udalosti, ktoré reprezentujú dianie v doméne, napríklad: OrderSubmitted, ThresholdExceeded a iné.


Bounded Context – kľúčový koncept DDD

Veľké systémy sa rozdeľujú na viac menších, jasne ohraničených kontextov. Každý kontext má:

  • vlastný model,
  • vlastný jazyk,
  • vlastnú logiku domény.

Tieto kontexty spolu komunikujú cez udalosti alebo dobre definované API.


Architektúra podľa DDD

DDD prirodzene smeruje k architektonickým prístupom ako:

  • Clean Architecture,
  • Onion Architecture,
  • Hexagonal Architecture.

Všetky majú spoločnú myšlienku: doména je v centre projektu a infraštruktúra je až okolo nej.


Praktický príklad DDD


public class Order : AggregateRoot
{
    private readonly List<OrderItem> _items = new();

    public void AddItem(Product product, int quantity)
    {
        _items.Add(new OrderItem(product.Id, quantity));
        AddDomainEvent(new OrderItemAddedEvent(product.Id, quantity));
    }
}

Tento príklad ukazuje agregát, internú doménovú logiku aj domain event. Logika sa nenachádza v kontroléri, ale priamo v doméne.


Prečo používať DDD?

  • Čitateľnejší a organizovaný kód
  • Oddelenie biznis logiky od infraštruktúry
  • Jednoduchá údržba aj pri veľkých aplikáciách
  • Prirodzená podpora mikroservisov a modulárnych monolitov
  • Nižšia chybovosť v kritických častiach

Záver

Domain-Driven Design pomáha vytvárať softvér, ktorý odráža skutočný svet a potreby biznisu. Ak pochopíte entity, value objekty, agregáty, domain events a bounded contexty, budete schopní vytvárať architektúry, ktoré sú robustné, flexibilné a dlhodobo udržateľné.

Máte projekt? Prvá konzultácia je zadarmo

Či už máte hotové zadanie alebo len nápad - odpoviem vám do 24 hodín.

Kapacita obmedzená: V danom čase aktívne pracujem maximálne na 2 projektoch súčasne, aby som zachoval vysokú kvalitu.

Napísať Email 📞 Zavolať teraz LinkedIn Profil