Orphix schreef op woensdag 19 januari 2005 @ 14:34:
Ik vind zelf de common & variability analyse een zeer belangrijke stap. Het bepaalt namelijk in grote mate in hoeverre je design flexibel, maar uitgebreid (en misschien complexer) is, of wat minder flexibel, maar kleiner
en sneller. De eeuwige trade-off natuurlijk.
Dit vind ik zelf ook een handige techniek; echter, het is een die pas later komt kijken.
Je zult zowiezo eerst je probleem-domein moeten specifieren en de entiteiten proberen te herkennen.
Daarna kan je gaan kijken welke relaties die entiteiten met elkaar hebben, hoe ze samen werken.
C&V analyse leidt dan ook niet automatisch tot een bepaald ontwerp, het maakt de keuze die je maakt expliciet. Bijvoorbeeld: is de database afhandeling common (ga je ervan uit dat je tot in de lengte van dagen gebruik maakt van dezelfde database server), of is het variabel (mogelijkheid tot overstappen naar andere database servers)? Dat is een vrije keuze.
Tja, als je een verkeerde keuze gemaakt hebt, dan kan je altijd je ontwerp gaan her-bekijken. Echter, hoe later dat je dit doet, hoe meer het kost.
Het is dus vaak noodzaak om van in het begin idd zo flexibel mogelijk te kunnen zijn.
Na deze keuzes vind ik het altijd een stuk gemakkelijk om vervolgens functionaliteit, verantwoordelijkheden en onderlinge relaties tussen klassen te bepalen.
Het zoeken naar zelfstandige naamwoorden is inderdaad een goed startpunt, maar ik neem eigenlijk nooit expliciet deze stap. Naarmate je meer ervaring hebt ga je deze entiteiten steeds sneller onderscheiden in een situatie.
Idd, same here. Expliciet doe ik het ook niet. Echter, na ervaring weet je wel wat er zo een class kan zijn en wat niet.
Ook iets dat je in je achterhoofd moet houden: een class heeft z'n eigen verantwoordelijkheden en deze moet weten hoe die verantwoordelijkheden moeten uitgevoerd worden.
Een andere class die een relatie heeft met die class moet wel weten kunnen 'zeggen' aan die class van doe nu dit, maar hoe deze class dat moet doen moet hij niet weten. (loose coupling).
Bv, jij volgt een opleiding, en volgt een bepaalde les. Op het einde van die les zegt de docent, ok, de les is afgelopen, ga maar naar jullie volgende les. Dan hoeft die docent niet te weten wat de volgende les is van iedere student of waar die student moet zijn om z'n volgende les te volgen. De student zelf moet dat weten.