Bobco schreef op 26 maart 2004 @ 14:10:
Het is mij niet helemaal duidelijk waarom de Vasteklant anders moet worden behandeld dan een Klant, maar ik zou geneigd zijn om dit gewoon te implementeren in de VasteKlant en Klant classes.
De vaste klant heeft een aantal extra variabelen die de superklasse (klant) niet heeft.
Waarom zou je de buitenwereld belasten met verschillen in implementatie tussen deze 2? Door in andere classes onderscheid te maken in Klant en VasteKlant komt een gedeelte van de kennis over de interne structuur van de VasteKlant buiten de class zelf te liggen, niet zo fijn voor je encapsulatie...
Daarom kun je die vast/niet vast functionaliteit ook beste bij de klant class mbv polymorfisme realiseren. Op dit manier wordt je systeem niet besmet met dit soort details. Maar je doet er wel verstandig aan om aparte classes aan te maken, en dit zou je eventueel volledig kunnen verbergen via een factory waarmee je geen weet hebt van vast/niet vast-class. Maar of dit nu zo praktisch is voor zo`n klein probleem is een 2e, overontwerpen is namelijk ook geen goeie zaak.
Er is wel een probleem aan deze polymorfe aanpak. Als er bv gui functionaliteit moet komen, zoals : getBegroetingsMessage dan zou je bij de vaste klant misschien willen zien: Beste vaste Klant.... en bij de niet vaste Klant: Beste Klant, weet u dat u korting krijgt als u vaste klant wordt? Als je deze functionaliteit mbv polymorfisme aan je domein objecten wilt toevoegen, dan worden je domein objecten dus besmet met allerlei niet-domein functionaliteit. En dat vind ik persoonlijk een slechte zaak.
Een tegenhandger van MVC is PAC en daar heb je deze problematiek in ieder geval niet. Hierbij ga je in je domein objecten ook meteen de visualisatie plaatsen. Je zou dus kunnen zeggen:
Persoon jan = ...;
Component c = jan.getFieldEditor();
De persoon class is volledig verantwoordelijk voor de gui opbouw en eigelijk hoef je ook niet meer te weten hoe Persoon nog in elkaar zit. En dit kenmerk: encapsulation is een van de hoekstenen van oo. Je zou dus kunnen zeggen dat PAC meer OO is dan MVC.
Het probleem is echt weer dat je allerlei aspecten van je systeem door elkaar gaat mixen (domein objecten, gui ) en dat is imho geen goeie zaak.
[
Voor 46% gewijzigd door
Alarmnummer op 26-03-2004 15:16
]