Re: [Cantharella-devel] Tableau wicket de la liste des molécules
Bonjour, Effectivement ce cas précis ne s'était pas encore présenté mais il ressemble tout de même aux listes de produits des pages de consultation/édition des purifications ou des tests biologiques. Ce ne sont alors pas des Molecule ou des MoleculeProvenance qu'on liste mais des Extrait ou des Fractions (la différence étant qu'Extrait et Fraction héritent tous deux de Produit). La différenciation de traitement pour ces deux entités étaient alors gérée par des typeof, et tu fais bien de soulever le problème Eric car cette solution mériterait également d'être améliorée. Pour la liste des Molecule/MoleculeProvenance, je vois deux améliorations : - différenciation de traitement sans passer par des typeof - interface commune afin de ne pas itérer sur une liste d'Object (ou pour être précis d'AbstractModel, tel qu'écrit actuellement dans le code) En ce qui concerne le pattern visiteur, ce n'est pas à mon avis la solution la plus adaptée car nous n'avons pas besoin d'avoir plusieurs traitements pour un type d'objet. Par ailleurs, l'ajout d'une propriété "visitor" (appelée par accept) a davantage d'impact sur le modèle que l'ajout d'une méthode (bien qu'il soit possible de la déclarer @Transiant). Voici deux propositions à discuter qui reprend le cas de l'Id à afficher à chaque ligne du tableau (propriété "id" si Molecule ou "molecule.id" si MoleculeProvenance). 1ère proposition : lien pour modifier le diagramme <http://yuml.me/diagram/plain;/class/edit/%5BMolecule%7C+getId%28%29%5D%3Cmolecule-%5BMoleculeProvenance%5D,%20%5BMoleculeRow%5B%7C+getId%28Molecule%29;+getId%28MoleculeProvenance%29%5D> + la surcharge de méthode permet la différenciation de traitement + aucune modification du modèle, MoleculeRow est indépendant du modèle et peut ainsi être inclue dans la couche web - ne répond pas au problème d'interface commune 2ème proposition : lien pour modifier le diagramme <http://yuml.me/diagram/plain;/class/edit/[--Interface--;MoleculeRow%7C+getRowId%28%29]%5E-[MoleculeProvenance%7C+getRowId%28%29],%20[--Interface--;MoleculeRow]%5E-[Molecule%7C+getId%28%29;+getRowId%28%29],%20[Molecule]%3Cmolecule-[MoleculeProvenance]> (comprendre <<Interface>> pour --Interface--) + l'utilisation du surclassage permet d'apporter les deux améliorations - est un peu plus intrusif par rapport au modèle (bien que l'interface et les méthodes supplémentaires n'auront a priori pas d'impact sur la structure de la BD sous-jacente) Quelle solution préférez-vous ? Une autre alternative à proposer ? Adrien -- Adrien Cheype Ingénieur en Systèmes d'Information Service « Informatique Scientifique et Appui aux Partenaires du Sud » Direction du Système d'Information (DSI) http://www.ird.fr/dsi/ http://www.ird.fr/informatique-scientifique/ INSTITUT DE RECHERCHE POUR LE DEVELOPPEMENT BP A5 - 98848 Nouméa - Nouvelle Calédonie Tél. +687 260 789
Le 12/02/2013 03:12, Adrien Cheype a écrit :
1ère proposition :
lien pour modifier le diagramme <http://yuml.me/diagram/plain;/class/edit/%5BMolecule%7C+getId%28%29%5D%3Cmolecule-%5BMoleculeProvenance%5D,%20%5BMoleculeRow%5B%7C+getId%28Molecule%29;+getId%28MoleculeProvenance%29%5D>
+ la surcharge de méthode permet la différenciation de traitement + aucune modification du modèle, MoleculeRow est indépendant du modèle et peut ainsi être inclue dans la couche web - ne répond pas au problème d'interface commune
2ème proposition :
lien pour modifier le diagramme <http://yuml.me/diagram/plain;/class/edit/[--Interface--;MoleculeRow%7C+getRowId%28%29]%5E-[MoleculeProvenance%7C+getRowId%28%29],%20[--Interface--;MoleculeRow]%5E-[Molecule%7C+getId%28%29;+getRowId%28%29],%20[Molecule]%3Cmolecule-[MoleculeProvenance]>
(comprendre <<Interface>> pour --Interface--)
+ l'utilisation du surclassage permet d'apporter les deux améliorations - est un peu plus intrusif par rapport au modèle (bien que l'interface et les méthodes supplémentaires n'auront a priori pas d'impact sur la structure de la BD sous-jacente)
Quelle solution préférez-vous ? Une autre alternative à proposer ? Personnellement, je préfère la première car cela représente un cas particulier d'affichage et cela permet de ne pas polluer le modèle de données avec des problématiques d'affichage.
Par contre, je pense qu'elle ne convient pas exactement au problème, car l'objet à manipuler devrait être un javaBean car wicket affiche un propriété d'un bean, par exemple: columns.add(new PropertyColumn<Molecule>(new Model<String>(getString("Molecule.nomCommun")), "nomCommun", "nomCommun")); il va appeler la méthode getNomCommun() de la ligne courant. Nous allons également essayer de réfléchir à une solution. Pour revenir a la même problématique pour les Produit, les molécules portant sur les produits, cela devient également lorsque l'on doit afficher le nom du programme sachant que: * la ligne est soit une Molecule, soit une MoleculeProvenance * le produit est soit une Fraction, soit un extrait Par exemple, pour la référence du lot, je dois faire deux cas encore suivant le type de produit: * "produit.purification.lotSource.ref" * "produit.extraction.lot.ref" -- Éric Chatellier - Code Lutin Tel: 02.40.50.29.28 - http://www.codelutin.com
participants (2)
-
Adrien Cheype -
Eric Chatellier