Bonsoir,
Une petite question que je me pose d'un point de vue conception. Je souhaite réaliser une application graphique traitant différents type de documents, je pensais donc faire une classe DocumentManager par type de document, car certains auront des opération spécifiques en plus des classiques save, save_as, etc. De plus cela est pratique pour la création de documents puisque cette modélisation permet d'appliquer le pattern Factory Method. Les documents sont représentés par une hiérarchie de classe.
Chaque document manager contient une liste de documents, maintenant je n'arrive pas à choisir entre les deux implémentations suivantes :
1] La classe mère de la hiérarchie de DocumentManager contient une list de Document, classe mère de la hiérarchie de classes pour les documents. Cela évite d'avoir à réécrire les opérations générales de gestion des documents dans chaque DocumentManager. Le hic c'est que pour les opérations spécifiques, chaque DocumentManager devra sous-caster les éléments de la liste à chaque utilisation, ce qui ne me plaît pas beaucoup.
2] La classe mère de la hiérarchie de DocumentManager ne contient que des méthodes virtuelles pures, ensuite vient une classe d'implémentation paramétrable par le type de documents, du style :
L'avantage est que le code de gestion des Documents est écrit une seule fois, et que l'on ne perd pas le type de documents que l'on gère. Maintenant la classe de base de la hiérarchie de Document devient alors inutile, et je trouve que l'on perd en clarté : à chaque définition de Document, au lieu d'avoir une API à consulter pour savoir quelles méthodes réimplémenter, on implémente les méthodes selon les erreurs générées par le compilateur :s
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 template <Document> DocumentManager { //...
Il y a sûrement d'autres avantages/inconvénients que je n'ai pas vus, d'où ma question :p
Partager