Patterns of Enterprise Application Architecture
Author: Martin Fowler
Review created: 2014-10-26
För några år sedan köpte jag en bok som heter Patterns of Enterprise Application Architecture skriven av en av mina favoritförfattare, Martin Fowler. Jag hann kanske läsa hälften av den innan jag började på en kurs och fick för mycket att göra för att hinna läsa ut resten. Sedan glömde jag bort den i flera år tills jag började på en annan kurs som hade boken som semi-obligatorisk kurslitteratur. Då passade jag på att läsa om hela boken.
Patterns of Enterprise Application Architecture handlar, som titeln antyder, om enterprise-mönster. Ordet möster gjordes ju berömt av GOF för ganska många år sedan, men vad är ett enterprise-mönster? Man kan väl säga att det är ett mönster som kan vara relevant för ett enterprise-system. Vad är då ett enterprise-system. Fowler menar att han inte kan ge en kort definition av vad ett enterprise-system är, men att det går att lista ett antal kriterier som ett enterprise-system oftast uppfyller. Dessa är:
- Systemet sparar data persistent.
- Systemet hanterar stora mängder data.
- Användarna av systemet använder det ofta samtidigt (concurrent access).
- Systemet innehåller ett stort användargränssnitt.
- Systemet körs inte i isolation utan har kopplingar till andra enterprise-system
Boken handlar alltså om mönster för sådana system. Den är uppdelat i två huvudsakliga delar: en del som diskuterar hur man kan kombinera ihop mönstren för att bygga ett system. och en del som listar själva mönstren. Det känns lite svårt med ordningen mellan de olika delarna. Lite hönan-och-ägget-problematik. Dels behöver man veta vad de olika mönstren innebär om man skall förstå diskussionen om hur man kan kombinera ihop dem till ett system. Men skall man läsa om alla mönster först (51 stycken på ca 400 sidor) så hinner man glömma bort en hel del av vad mönster ett handlade om när man läst klart om mönster 51. Jag gjorde så att jag växlade mellan diskussionsdelen och delen som beskriver mönstren. Ibland började jag läsa lite i diskussionsdelen tills jag stötte på en referens till ett mönster jag inte läst om. Då läste jag texten om det innan jag hoppade tillbaks till diskussionen där mönstret nämndes. Andra gånger läste jag på om några mönster först innan jag läste diskussionen där de refererades. Lite hoppigt blev det, men det var detta sätt som funkade bäst för mig.
Angående formatet på mönsterbeskrivningarna så är de ganska lika de i GOF, men inte helt identiska. Fowlers format funkade bra tycker jag och jag störde mig inte på diskrepanserna gentemot GOF:s format.
Fowler gör en gruppering av de beskrivna mönstren i ett antal grupper:
- Domain logic patterns (ex Domain Model)
- Data source architectural patterns (ex Active Record)
- Object-relational behavioral patterns (ex Unit of Work)
- Object-relational structual patterns (ex Association Table Mapping )
- Object-relational metadata mapping patterns (ex Repository)
- Web presentatin patterns (ex Model View Controller)
- Distribution patterns (ex Remote Facade)
- Offline concurrency patterns (ex Optimistic Offline Lock)
- Session state patterns (ex Client Session State)
- Base patterns (ex Layer Supertype)
Jag tycker att grupperingen av mönstren är bra. Den hjälper en att relatera mönstren till varandra och att veta vilka mönster man skall jämföra med varandra för att se vilka som bäst passar till en given situation.
Mönstren är klart beskrivna och varje mönster är exemplifierat med ett eller flera kodexempel. Dessa varierar i storlek baserat på vilket mönster de skall illustrera. De längre kodexemplen kan vara ganska invecklade och kan kräva ett stort mått av koncentration för att förstå.
Boken är skriven 2003 så den har några år på nacken. Detta märks blanda annat i kodexemplen som är skrivna i Java version 1.3 eller 1.4 (ser inte skillnaden, före Java5 är det i alla fall) och en tidig version av C#. För ett öga som numera är vant vid generics ser de kodexempel som är skrivna i Java lite ålderdomliga ut. Det är givetvis inget stort problem, bara något man noterar. När det gäller kodexemplen skrivna i C# så ser de lika fula ut som alla andra C#-program ;)
Hur har då stoffet i boken stått sig över åren? Ganska bra skulle jag vilja säga. Dock är boken skriven innan JPA fanns och innan exempelvis Ruby on Rails gjort Active Record berömt. Detta gör att en del mönster som var väldigt relevanta 2003 kanske inte är lika relevanta idag då de är inbakade i ramverk som i stor utsträckning används som ersättning för egenskriven kod. Dock kan det vara mycket nyttigt att känna vilka mönster som ligger till grund för dessa ramverk och då kommer beskrivningarna i Patterns of Enterprise Application Architecture väl till pass.
Som vanligt skriver Fowler mycket pedagogiskt och lättläst. Han inflikar humoristiska detaljer och små sidospår, och kommer med anekdoter som hjälper till att hålla uppe läsarens intresse för ett ämne som annars kan vara lite torrt (hur roligt är det egentligen att läsa om arv kan modelleras på tre olika sätt i en relationsdatabas? ;).
Sammantaget skulle jag vilka säga att Patterns of Enterprise Application Architecture erbjuder intressant läsning och man kan hitta mycket nyttiga mönster i den. Om man bara accepterar att kodexemplen är skrivna i äldre versioner av Java och C# så funkar den fortfarande trots att det har gått några år sedan den skrevs.
Betyg: 4 av 5.