Ik heb al een tijd het volgende probleem. Ik heb een typesysteem en daarin zitten Type objecten en functies zoals isEqualType en isSubType. Ik kan bij de types deze functionaliteit onderbrengen door 2 methodes isEqualType en isSubType aan te maken. Deze aanpak geeft echter een aantal problemen.
*alle functionaliteit van 1 functie ligt verspreid over een hele class hierarchie. Ik vind dit in dit geval een ware onderhoudsnachtmerrie.
*je zit vast aan de functionaliteit zoals geimplementeerd in die methodes. Wil je bv dezelfde Types hanteren, maar een ander soortige functionaliteit dan heb je een probleem. Stel dat je een variant van dit typesysteem nodig bent waarin een boolean een subtype is van een integer, dan kan je dit niet mooi oplossen.
*als je een nieuwe functie wilt, zul je dit bij alle type objecten moeten implementeren.
Deze manier van aanpak heeft wel een voordeel: je kan eenvoudig nieuwe types aan het systeem toevoegen. Je hoeft alleen maar de methodes te implementeren en je bent klaar.
Een andere manier van werken is dat je een module (class bv) gaat maken waarin alle functionaliteit zit. Je kan bv werken met een visitors om te gaan dispatchen. Helaas kleeft hier ook een groot nadeel aan:
*het is niet uitbreidbaar. Stel dat ik een nieuw type toevoeg die interessant is voor een of andere toepassing van dat systeem maar niet voor andere toepassingen. Dan zal ik in deze module extra afhandeling moeten plaatsen alleen voor dit type, oftwel: mijn generiek typesysteem wordt besmet met specifieke functionaliteit.
De voordelen zijn wel dat ik bv eenvoudig een andere subtype functionaliteit aan het systeem kan koppelen, door gewoon die module te verwisselen (bv via een Abstract Factory de implementatie verwisselbaar maken). Het super inzichtelijk omdat alle functionaliteit in 1 module te hebben. En nieuwe functionaliteit toevoegen is een kwestie van een nieuwe module op te zetten.
Ik zit dus een beetje in een impasse. Ik wil graag dat functionaliteit modulair is maar ik wil dat het systeem ook uitbreidbaar is. Wat voor tips kunnen jullie mij geven om dit probleem op te lossen.
[edit]
*moet nog ff naar die lastige bridge pattern kijken*
*alle functionaliteit van 1 functie ligt verspreid over een hele class hierarchie. Ik vind dit in dit geval een ware onderhoudsnachtmerrie.
*je zit vast aan de functionaliteit zoals geimplementeerd in die methodes. Wil je bv dezelfde Types hanteren, maar een ander soortige functionaliteit dan heb je een probleem. Stel dat je een variant van dit typesysteem nodig bent waarin een boolean een subtype is van een integer, dan kan je dit niet mooi oplossen.
*als je een nieuwe functie wilt, zul je dit bij alle type objecten moeten implementeren.
Deze manier van aanpak heeft wel een voordeel: je kan eenvoudig nieuwe types aan het systeem toevoegen. Je hoeft alleen maar de methodes te implementeren en je bent klaar.
Een andere manier van werken is dat je een module (class bv) gaat maken waarin alle functionaliteit zit. Je kan bv werken met een visitors om te gaan dispatchen. Helaas kleeft hier ook een groot nadeel aan:
*het is niet uitbreidbaar. Stel dat ik een nieuw type toevoeg die interessant is voor een of andere toepassing van dat systeem maar niet voor andere toepassingen. Dan zal ik in deze module extra afhandeling moeten plaatsen alleen voor dit type, oftwel: mijn generiek typesysteem wordt besmet met specifieke functionaliteit.
De voordelen zijn wel dat ik bv eenvoudig een andere subtype functionaliteit aan het systeem kan koppelen, door gewoon die module te verwisselen (bv via een Abstract Factory de implementatie verwisselbaar maken). Het super inzichtelijk omdat alle functionaliteit in 1 module te hebben. En nieuwe functionaliteit toevoegen is een kwestie van een nieuwe module op te zetten.
Ik zit dus een beetje in een impasse. Ik wil graag dat functionaliteit modulair is maar ik wil dat het systeem ook uitbreidbaar is. Wat voor tips kunnen jullie mij geven om dit probleem op te lossen.
[edit]
*moet nog ff naar die lastige bridge pattern kijken*
[ Voor 10% gewijzigd door Alarmnummer op 04-03-2004 15:25 ]