Bonjour,
Je suis actuellement entrain de concevoir une sorte de "framework" pour un gros logiciel écris en C++/MFC. Mise à part une petite problématique, je me pose surtout la question sur la qualité du modèle que je conçois. Je n'ai pas très grande expérience et c'est pour ça que je fais appel à vous.
Donc premièrement j’ai une question ( que je poserai en fin ), deuxièmement je suis avide d’avis, de critique et de conseils (car je sens qu'il y a moyen de faire mieux) et petit troisièmement dites-moi si vous reconnaissez un pattern appliqué ( car même après les avoir lu et relu, je les reconnais difficilement).
L'existant
Tout d'abord, il y a l'existant sur lequel je n'ai aucun controle ou presque. On a une classe Record héritant sur plusieurs classe ( final order, material unit, job, ...). Tout ces objets sont directement ou indirectement liés entre eux. Prenons l'exemple des material unit qui peuvent être lié à 0 ou N FinalOrder et à 0 ou N job. La method GetAttribute permet d’obtenir à base d’un nom n’importe quel attribut non calculé.
Le but de mon travail est de pouvoir obtenir des attributs calculé et non calculé, ainsi que d'obtenir des attributs d'une FinalOrder en partant de sa Material unit (ceci dans tous les sens de tous les type de record vers tout les type de record). Et tout ça de façon transparente.
De cette manière l'affichage, et l'export doivent se faire simplement.
Recherche du record
Ilookup est une interface contenant les getters vers tous les objets. Elle hérite sur FinalOrderLookup, JobLookup, ... De cette manière, une fois qu’on a un Ilookup on peut accéder à tous les objets liés de façon transparente.
Recherche d’attributs
LookupOperation contient un Ilookup qui permet d’obtenir le bon type de record. Et les classes filles connaisse les traitements exacte à effectuer. Par exemple MaterialUnitDefaultOperation connaitra le traitement pour tout les attributs non calculés ( c’est toujours le même traitement pour les non calculé). La methode BuildOperation de IOperation se débrouille de trouver la bonne instance.
ExportOperation, construit avec un IOperation et un flux de sortie, se débrouille pour exporter comme il faut.
Le but est de construire une list de IOperation. Cette liste représente toutes les colonnes d’une vue liste. Pour l’affichage il suffira de créer un nouveau Ilookup et de le setter pour chaque ligne de la liste.
Même chose pour ExportOperation, la différence est que je n’arrive pas à faire un ExportOperation qui fonctionne, génériquement, pour tous les IOperation ET qui me permette de setter un Lookup.
Je pourrais setter un IOperation mais ca implequerait que je doive RE-retrouver le bon type de LookupOperation. Ou je pourrais faire contenir à ExportOperation un LookupOperation mais ca engendrerait une moins bonne généricité.
Question :
Comment pouvoir garder une certaine généricité (garder IOperation) et garder une certaine flexibilité (pouvoir setter simplement un ILookup) ?
De façon à parourir une liste d’ExportOperation (la liste des différents attributs à exporter) et de pouvoir changer le ILookup pour chaque ligne à exporter.
Un grand merci d’avoir déja tout lu![]()
Partager