Zpět na znalosti

Způsob práce

Architektura aplikací

Architekturu nevolím podle názvu vzoru, ale podle složitosti problému. Cílem jsou čitelné hranice, bezpečné změny a řešení přiměřené velikosti aplikace.

  • Clean Architecture
  • DDD
  • Hexagonal Architecture
  • Dependency Injection
  • SOLID

Struktura má pomáhat změnám, ne je komplikovat.

U větších a dlouhodobě rozvíjených aplikací odděluji UI, Application, Domain a Infrastructure. Doménová pravidla pak nejsou přilepená na framework, databázi ani konkrétní API a jednotlivé části mají jasnější odpovědnost.

To ale neznamená, že každá část aplikace potřebuje plnou Clean nebo hexagonální architekturu. U jednoduchého problému s několika vstupy a bez složitých pravidel bývá přímé service-based řešení čitelnější a levnější na údržbu.

Vývoj přístupu

Od Controller → Facade → Service k přiměřeným hranicím.

  1. Dříve

    Controller → Facade → Service

    Tento styl mi dával srozumitelnou strukturu pro tehdejší projekty. Postupně jsem ale u složitějších toků a více integrací narážel na to, že odpovědnosti a závislosti potřebují výraznější hranice.
  2. Složitější části systému

    Oddělení obchodních pravidel od techniky

    Když aplikace obsahuje více use cases, integrací nebo pravidel, odděluji doménu a aplikační logiku od HTTP, databáze a frameworku. Tím se lépe testuje, mění a rozšiřuje.
  3. Dnes

    Clean a hexagonální principy podle potřeby

    Využívám principy Clean Architecture, DDD, dependency injection a portů s adaptéry. Nejde mi o nálepku ani počet vrstev, ale o jasnou odpovědnost a kontrolované závislosti.
  4. Pragmatická volba

    Kdy je jednodušší řešení lepší

    Malý modul bez komplexních pravidel nepotřebuje samostatný domain model, porty ani několik adapterů. V takovém případě volím přímou strukturu a komplexitu přidávám až tehdy, když řeší skutečný problém.

Hranice a závislosti

Obchodní pravidla směrem dovnitř, technické detaily směrem ven.

Vrstvy nejsou samoúčelné. Pomáhají ukázat, kudy smí téct závislosti: UI volá aplikační use case, use case používá doménu a technické detaily implementují rozhraní, která aplikace potřebuje.

Přístup upravuji podle rizika změny, délky života aplikace, počtu integrací i schopnosti týmu architekturu skutečně udržovat.

Vrstvená aplikace

Kde patří odpovědnost a transakce

  1. UI: HTTP, Console nebo message handler
  2. Application: use case a transakční hranice
  3. Domain: pravidla, entity a value objects
  4. Infrastructure: databáze, fronta a framework

Port a adaptér

Příklad napojení na externí zdroj dat

  1. Application: Import výdejních míst
  2. Port: CarrierPointSource
  3. Adaptér: XML feed nebo API dopravce
  4. Infrastructure: HTTP klient, parser a úložiště

Principy, které používám

Architektura podle potřeb aplikace

  • Clean Architecture
  • DDD
  • Hexagonal Architecture
  • Dependency Injection
  • SOLID
  • KISS
  • YAGNI
  • Deptrac

Potřebujete v aplikaci jasnější hranice, ne více vrstev?

Rád pomohu vyhodnotit, kde architektura přinese skutečný užitek, a kde je lepší zachovat jednoduché a čitelné řešení.

Zavolejte mi

Zavolám vám následující pracovní den mezi 9:00 a 17:00.

Můžete mi také zavolat rovnou.

+420 605 181 728

Nechte mi telefonní číslo a pošlete žádost o zpětné zavolání.

Odesláním souhlasíte se zpracováním údajů pro vyřízení žádosti.