2009-06-17 4 views
0

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.

Répondre

1

le premier problème vous résolvez en définissant le tag en tant qu'objet. Puisque tag n'est pas une chaîne mais un objet de type.

Et le deuxième problème que vous résolvez en usin réflexion, mais que la valeur de l'étiquette doit correspondre exactement au nom de propriété. Disclaimer la réflexion est proche, mais peut-être pas 100% correcte.

+0

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

+0

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

Questions connexes