Filed Under (Code algemeen) by Christiaan van Bergen on November-27-2007

Bij het modelleren/refactoren van een functionaliteit wil je zo flexibel mogelijk zijn, waarbij je je wilt houden aan onder andere het design principle Open-Closed Principle (OCP). Je weet dat bepaalde zaken zullen veranderen, zorg er dan ook voor dat het model dit ondersteunt.
Wat helaas hierin veelal ontbreekt, is de specifieke domeinkennis om de veranderlijkheden te onderkennen. Met als gevolg dat je (te) vaak werkt volgens het principe take the first bullet terwijl je dit met een beetje voorkennis had weten te voorkomen.
De meeste domeinkennis moet nog steeds bij de mensen uit de business komen, maar om met onze modelleertermen aan te komen werkt vaak niet verhelderend. Neem bijvoorbeeld de term points of extensibillity.

Ik pleit er voor om de term extensibillity in deze te veranderen in change. De term change spreekt over het algemeen meer tot de verbeelding van degenen met domeinkennis. Het dwingt de gedachten de richting van de toekomst te kiezen. Welke zaken gaan veranderen. Buiten uitbreidingen, wat is veranderlijk in het geheel.

Binnen het kader van Agile en XP staat verandering in een hoog vaandel. De uitdrukking embrace change -Kent Beck- dient zich dan ook meteen weer aan.

Als ontwikkelaar moet je rekening houden met elk punt in je ontwerp dat aan verandering onderhevig kan zijn. Het is met deze kennis dat we op de juiste plekken de juiste patterns kunnen toepassen om op veranderingen te anticiperen.

Ik hoor graag wat jullie hiervan denken…



Comments
Bert-Jan Diedering on November 27th, 2007 at 11:26 pm #

My 2 cents :

Als ontwikkelaar kun je naar mijn mening geen rekening houden met ieder punt in je ontwerp dat aan verandering onderhevig kan zijn.

Dat is per project ook verschillend. Als het een simpele asp.net site is die een aantal pagina’s heeft en waar wat flow in zit hoef je niet perse rekening te houden met schaalbaarheid en veranderingen.

Grote projecten daarentegen waarbij je ook in een grote groep gaat werken, kun je niet anders dan rekening houden met veranderpunten in je ontwerp. Maar goed daar is “loose coupling & tight cohesion” ook weer de vuistregel volgens mij.

Het boek “Design Patterns Explained” van Alan Shalloway en James R. Trott beschrijft dit ook min of meer.

And why is it that you have to put your 2 cents in, while it’s a penny for your thoughts? Somebody’s making a penny…

André Boonzaaijer on December 4th, 2007 at 9:32 pm #

100% eens met je stelling dat je als ontwikkelaar rekening moet houden met verandering, ik zou dat echter graag wel willen scheiden in flexibiliteit in architectuur versus flexibiliteit in ontwerp. Hoewel de scheiding tussen deze twee vaak vervaagt, denk ik dat er binnen het kiezen voor een bepaalde architectuur (raamwerk, guidelines, constraints waaraan verschillende ontwerpen moeten voldoen) meer rekening gehouden moet worden met de door jouw genoemde ‘points of change’. Als er namelijk binnen ontwerp van verschillende delen door iedereen te veel rekening met verandering wordt gehouden loop je in de val van ‘generieke generiekheid’ ofwel ‘alles moet altijd overal kunnen’. Zo krijg je het recept voor een configuratie-hel danwel een minder gebruiksvriendelijke gebruikersinterface.

Mijn ervaring is dat als er binnen projecten gekozen wordt voor een duidelijke architectuur gebaseerd op separation of concerns ofwel het satelliet-domain model (http://www.domaindrivendesign.nl) je vrijwel alle flexibiliteit die je zal wensen - ook voor de toekomst - aan je project toevoegt.

You must be logged in to post a comment.