2010-02-01 6 views
0

J'ai un code où le modèle contient certaines classes comme (vb.net pseudocode, mais pourrait être une langue OO):Éviter la sélection sous-type dans le code de vue

Enum AttributeType 
    Boolean 
    Date 
    String 
End Enum 

MustInherit Class Attibute 
    Must Override Function Type As AttributeType 
End Class 

Class BooleanAttribute: Attribute 
    Function Type As AttributeType 
     Return AttributeType.Boolean 
    End Function 
End Class 

Et la vue contient un code comme :

Select Case AttributeType 
    Case Boolean 
     //Display checkbox control 
    Case Date 
     //Display date picker control 
    Case String 
     //Display textbox control 
End Select 

Je ne aime pas vraiment le code dans la vue, pour les raisons évidentes, espérons- (ce qui se passe quand je reçois un nouveau type d'attribut, etc.). Ma question est, comment devrait je le remplacer?

Je pourrais facilement ajouter une méthode aux classes concrètes, mais cela pollue le modèle avec des trucs d'interface utilisateur, donc c'est une idée horrible.

Je pourrais déplacer le select dans une usine, mais cela semble juste cacher le problème .

Quelqu'un peut-il conseiller une meilleure approche?

Répondre

0

S'il s'agit d'une seule instruction Case, je la laisserai telle quelle.

Si c'est quelque chose qui est fait plusieurs fois, vous pouvez créer une méthode d'assistance, que vous envoyez dans tous les contrôles et la méthode d'assistance définit le bon contrôle visible.

Vous pouvez également faire un pour chaque type d'attribut, ce qui peut réduire le travail requis lors de l'ajout de nouveaux types d'attribut.

Questions connexes