Le problème que je rencontre actuellement est de mapper plusieurs champs GUI aux propriétés de l'objet (c.-à-d. La couche de présentation au mappage de couche logique métier). Pour être plus précis, c'est dans WinForms VB.Net 2.0.Interface graphique vers le mappage d'objet métier VB.Net
La nature de la solution nécessite que nous ayons 4 colonnes qui présentent le même type de comportement sur notre interface graphique - chaque colonne se composant de 11 zones de texte (nous n'utiliserons que cette petite taille d'échantillon).
Ce que je fais actuellement est le réglage de la balise de chaque zone de texte dans les quatre colonnes à une valeur comme ceci:
Textbox1.tag = "name"
Textbox2.tag = "type"
Textbox3.tag = "speed"
Lorsqu'un événement est déclenché par la zone de texte (par exemple keypress), je regarde la conteneur parent, dont j'ai également défini la balise comme une chaîne mappant un objet spécifique. J'utilise cela, en conjonction avec la balise textbox, pour déterminer la propriété de l'objet que je dois définir. Dans l'ensemble, il ressemble à ceci:
dim objectToMapTo //the generic parent object which all my custom myObjects inherit from
select case sender.parent.tag //the parent object that the property needs to map to
case "column1"
objectToMapTo = myObject1
case "column2"
objectToMapTo = myObject2
case "column3"
objectToMapTo = myObject3
case "column4"
objectToMapTo = myObject4
end select
select case sender.tag //the actual textbox's tag value which maps to the property
case "name"
objectToMapTo.Name = sender.text //sender.text is conceptual for
//the data that needs to be set -- i.e. this could be a calculated
//number based on the text, or simply a string, etc
case "type"
objectToMapTo.Type = sender.text
case "speed"
objectToMapTo.Speed = sender.text
...
end select
Comme vous pouvez le voir, cela peut être très mauvais, plutôt rapidement. Actuellement, nous définissons 43 propriétés bizarres qui peuvent être mappées - de sorte que l'instruction select est extrêmement longue - dont beaucoup sont intégrées dans plusieurs méthodes pour tenter d'essayer DRY (j'ai dilué le code à essentiellement un conceptuel la mise en oeuvre).
Question est: comment est-ce que je peux refactoriser ceci? J'ai essayé dans une certaine mesure d'utiliser des dictionnaires/hachages, mais soit ils sont devenus trop complexes, soit ils n'ont tout simplement pas de sens en termes d'implémentation car ils ont encore plus compliqué le problème.
Merci pour l'aide.
la réflexion fonctionnerait bien en fait. La seule chose est que chaque valeur est définie un peu plus complexe. Donc, nous pourrions l'avoir comme objectToMap.Customer.Name = sender.text, puis objectToMap.Asset.Type = sender.text - donc il doit essentiellement obtenir/définir les propriétés imbriquées qui lui donne une couche supplémentaire de complexité – MunkiPhD
J'ai répondu à la question, mais si vous changez les règles, je dois changer la réponse. YOu problème avec les propriétés imbriquées est également facilement résolu avec réflexion BTW. Mais ce n'était pas la question. – chrissie1