Boekbespreking
Java Application Architecture : Modularity Patterns with Examples Using OSGi /
Kirk Knoernschild. – Prentice Hall, Upper Saddle River, NJ, 2012.
Boekbespreking
Java Application Architecture : Modularity Patterns with Examples Using OSGi /
Kirk Knoernschild. – Prentice Hall, Upper Saddle River, NJ, 2012.
In de Java-wereld hebben we een stroom aan boeken over hoe je moet
programmeren op de vierkante centimeter: wanneer je interfaces moet gebruiken
in plaats van concrete ‘classes’, hoe groot methods moeten zijn, over Dependency
Injection, Visitors, Observers, Model-View-Controller en honderd andere
patterns. Java-ontwikkelaars weten veel over het verdelen van een applicatie in
logische lagen, of wanneer je een gelaagde applicatie juist beter kunt vermijden
met bijvoorbeeld het CQRS (Command Query Responsibility Segregation) pattern.
Er is ook genoeg geschreven over het definiëren van services en hoe je die
moet groeperen in applicaties. Maar over het niveau daartussenin,
hoe je een grote applicatie verdeelt in fysieke modules, is er gek genoeg
verbazend weinig literatuur.‘Java Application Architecture: Modularity
Patterns with Examples Using OSGi’ van Kirk Knoernschild is zo'n boek. Het
richt zich op fysiek ontwerp zoals hoe een software systeem verpakt wordt in
installeerbare eenheden, welke ‘classes’ in welke module thuishoren en welke
afhankelijkheidrelaties er tussen de modulen bestaan.
Het boek is verdeeld in drie delen. Deel I definieert wat een module is (zeg
maar een jar-file), welke aspecten daaraan zitten, de plaats van modules in de
applicatiearchitectuur, de functie van modulariteit bij het beperken van
complexiteit en hoe modulariteit hergebruik van code kan bevorderen. Het eerste deel
sluit af met een uitgewerkt voorbeeld, waarin een eenvoudige maar monolithische applicatie
in zeven stappen modulair wordt gemaakt. Deel II is een catalogus van achttien patterns,
verdeeld in de categorieën base patterns,
dependency patterns, usability patterns, extensibility patterns en utility
patterns. Deel III tenslotte presenteert OSGi als het de facto enige
beschikbare dynamische modulesysteem voor Java. Het beschrijft hoe je de in het
voorgaande deel gemodulariseerde applicatie in een OSGi-omgeving kunt installeren,
zodat de voordelen van een modulaire applicatie ook bij installatie
en op runtime gerealiseerd kunnen worden.
De achttien ‘Patterns Of Modular Architecture’ (POMA) in deel II vormen de kern
van dit boek. Ze zijn beschreven op een manier die onafhankelijk is van Java of
OSGi. Daardoor zijn ze breed toepasbaar in allerlei omgevingen, ook
bijvoorbeeld .NET, al zal een .NET-ontwikkelaar waarschijnlijk afgeschrikt
worden door het woord ‘Java’ in de titel. Hoewel OSGi al veel langer intern
wordt toegepast in applicatieservers, is het pas bij recente versies mogelijk
om daarop ook OSGi-applicatiebundles te installeren. En die versies hebben nog
lang niet overal hun weg gevonden naar de productieomgevingen. Toch is het
nuttig om de patterns ook nu al toe te passen, bijvoorbeeld op de verdeling van
een systeem in maven modules. Wanneer OSGi (of Jigsaw) dan beschikbaar komt, zal
het weinig moeite kosten om de applicatie daarvoor geschikt te maken.
Opvallend genoeg maakt de auteur bij het bouwen van de modules in de voorbeelden gebruik
van ant als build tool, terwijl veel Java-ontwikkelaars jaren geleden
al ant verwisseld hebben voor maven. Het waarom daarvan wordt duidelijk, wanneer
Knoernschild laat zien dat je voor het refactoren van de modulestructuur van een
applicatie alleen maar het ant build-script hoeft aan te passen. In maven
is dat veel moeilijker. Daar zijn source files gegroepeerd naar modules.
Bij refactoring van de modulestructuur betekent dit dat je de source files moet verplaatsen,
ook in de versiebeheer repository, wat refactoring veel moeilijker
maakt.
Robert C. Martin schrijft in het voorwoord dat dit boek alleen ‘hard core
stuff’ bevat en geen ‘fluff’. Dat is naar mijn mening niet helemaal waar, want
de auteur gebruikt vrij veel woorden om te zeggen wat hij wilt en herhaalt
zichzelf vaak. Dat doet overigens weinig af aan de waarde van het boek. Vooral
de patterns van modulariteit zijn onschatbaar en verdienen het om grondig
bestudeerd en misschien wel uit het hoofd geleerd te worden.