Modularita je dobrá, když ...
- stavíte platformu
- vyvíjíte obří jedno-kontejnerovou aplikaci
- chcete rozbít a postupně povyměňovat legacy kód
- chcete dát příležitost dodavatelům 3tích stran
- stavíte jednoúčelové aplikace
- máte komponentovou architekturu vyššího řádu (SOA, ESB)
- nemáte ambice tvořit znovupoužitelné portofolio kódu (NIH haters)
Začít se dá s málem
- stavěli jsme na tom, co známe
- neměli jsme žádné velké ambice
- byli jsme si vědomi limitů
customizace Spring Frameworku
- existují industriální standardy s letitou historií
- řeší miliony věcí
- jen jsou trochu komplikované
OSGI
Životní cyklus modulu
- Načtení konfigurace, inicializace Spring kontextu
- Kontrola dependencí, doplnění referencí v proxy objektech
- Zničení Spring kontextu, uvolnění zdrojů
Publikace API
Propagace událostí
Celé je to jen o ...
aplikaci pravidel objektového návrhu na vyšší úrovni.
Nejdůležitější je
- kvalitní izolace
- tak aby nešla jednoduše obejít
- když to obejít půjde, tak to někdo udělá
- standardizovaný způsob komunikace, a.k.a. publikace veřejného rozhraní
- předávání zpráv (observer pattern)
- přímá volání přes veřejná rozhraní
- explicitní deklarace konzumovaných rozhraní
- určení odpovědnosti/velikosti modulů
- jasně definovaný účel
- malé moduly jdou proti low coupling
- velké moduly jdou proti high cohesion
... a možnost změny za běhu aplikace se šikne!
Zapouzdřit modul ve všech ohledech
... je pěkný oříšek a zamotá vám hlavu, stejně jako nám.
- evoluce datového modelu - verzování (ala Liquibase)
- zapouzdření view do modulu (FreeMarker, JSP)
- dynamická registrace servletů a filtrů (Servlet 3.0)
- web frameworky s modularizací nepočítají
Ultimátní meta: mít možnost nastartovat stejný modul vícekrát.
Seznam použitých modulů na Runczech.com
Kdo napočítal 21 má u mě pivo!
Startup time 70s
Stojí to za tu námahu
- rozbití monolitu a snížení provázanosti
- zpřístupnění programování základního produktu firmy více vývojářům
- lepší (vertikální) dělba práce
- princip přirozeného výběru
- variabilita díky kompozici
- možnosti zásahů do aplikace za běhu
Aktuálně máme v repository 35+ znovupoužitelných modulů a nepočitatelně jednoúčelových zákaznických modulů.
Vyzkoušet si to můžete i na vlastní kůži.
Děkuji za pozornost
Honza Novotný, FG Forrest