Waar ligt de essentie van jouw software?

Hierboven staat een vraag die je niet dagelijks zult krijgen. Toch is het in de software ontwikkeling wel één van de belangrijkste dingen om bij stil te staan. Waar draait het nu eigenlijk om in je software? Draait je software om de database? Draait het om de User Interface?

Het zou kunnen dat je veel gegevens opslaat en muteert. Dan is de database belangrijk, maar in dat geval betekent dat, dat je veel CRUD-activiteiten uitvoert. Daar ligt immers de kracht van onze relationele databases.

Als het om de UI draait, zijn vanzelfsprekend de schermen die onze gebruikers te zien krijgen van belang. De schermen zijn vaak het aanknopingspunt met de gebruikers van de software: door de functionaliteit te visualiseren, wordt immers voor de gebruiker duidelijk wat de software zou moeten doen.

Dit alles neemt niet weg, dat we de essentie van de meeste software niet terugvinden in de databases of de UI. Om de essentie van software vast te stellen is het handig een blik te werpen op het werk van Fredrik Brooks. In “No Silver Bullet” beschrijft hij het verschil tussen de essential complexity en accidental complexity. Vrij vertaald zegt hij daarin dat we in onze software onderscheid moeten maken tussen de delen die de kernproblematiek (essential) ondersteunen en alle faciliterende logica (accidental). Wanneer we dat relateren aan de software die we maken, dan gaat het in de kern om de logica die onze businessprocessen ondersteunen. De essentie van onze software vinden we dan dus niet terug in de database of UI. Daar willen we immers de businesslogica niet in plaatsen.

Dit maakt dat Domain Driven Design op dit moment zoveel aandacht geniet: alleen in een domeinmodel plaatsen we namelijk puur en alleen alle logica die onze businessprocessen representeert. Om deze kern van logica draait onze software. Dat is de essentie!

Als het domein (met daarin de businesslogica) de essentie is, dan is volgens het denken van Brooks de overige logica slechts faciliterend. Deze overige logica zorgt ervoor dat we in staat zijn ons domein in haar levencyclus te ondersteunen. Anders gezegd: het domein (dat de businessprocessen ondersteunt) maakt de software uniek.

De faciliterende onderdelen zijn niet uniek voor het domein. Daarom kunnen die onderdelen generiek gemaakt worden en makkelijk hergebruikt worden om verschillende domeinen te ondersteunen. Deze logica kan in frameworks belanden, of misschien zelfs in taal. Technieken als Domein Specific Languages maken het mogelijk om deze functionaliteit in tekstuele dan wel visuele talen te plaatsen. Vervolgens kan vanuit deze talen de concrete implementatie genereert worden.

Ondanks het feit dat het soms lijkt dat onze software draait om de database of de schermen, blijkt dat de businesslogica de uiteindelijke kern vormt. Door deze centraal te stellen en onafhankelijk te maken van alle andere code eromheen, leggen we daar de focus op in onze software. De overige onderdelen kunnen we daarna genereren of zoveel mogelijk in standaard frameworks plaatsen. Wanneer je frameworks als Spring of Seam toepast, is het goed om de essentie van je software in de gaten te houden. Zorg er dus voor dat deze frameworks je businessdomein faciliteren!