2010-09-21 35 views
0

Supposons que je le modèle suivant (exemple générique):Comment créer des contrôles intelligents pour une variété d'objets liés

  1. personne (classe de base)
  2. étudiant (dérivé)
  3. enseignant (dérivé)
  4. Secrétaire (dérivé)

Il y a quelques champs communs, tels que le prénom, le nom, téléphone nr., mais plusieurs champs uniques à chaque DERIV type ed (étudiant, enseignant, secrétaire).

Je voudrais être en mesure d'afficher chaque type sur une seule page - disons PersonDetails?

Quelle serait la meilleure façon d'aborder cela? Mes pensées pour créer un contrôle pour chaque type et une structure de type cas dans la page parente où vous chargez le contrôle correspondant. Bien que cela fonctionne, je prévois des problèmes avec cette route si vous commencez à ajouter beaucoup de types. Dites demain que vous ajoutez 10 types - votre cas va se développer et vous aurez besoin de créer 10 contrôles supplémentaires. Ce n'est clairement pas une bonne idée ni efficace. Sans mentionner que vous avez plusieurs autres pages, vous devrez commencer à créer des contrôles pour celles-ci. Je pensais plutôt à travailler avec une classe de base et j'ai le contrôle interpréter le type - bien que cela crée un énorme cas où vous allez créer des étiquettes et autres en fonction des propriétés; ne semble pas très bon non plus ...

Quelqu'un sait-il d'une meilleure façon?

Merci d'avance.

Répondre

0

Il est préférable de créer de nouvelles classes qui spécialisent leur comportement en remplaçant une méthode plutôt que d'avoir du code qui "connaît" les classes. Pour ce faire, définissez une méthode protégée qui gère le rendu.

est ici un très basique, dénudés, par exemple (en supposant java est la langue):

class Person { 
    protected String toHtml() { 
    // generate some html 
    } 
} 

class Student extends Person { 
    protected String toHtml() { 
    // generate some different html 
    } 
} 

// similar classes for other person types 

class Renderer { 
    void buildPage(List<Person> people) { 
    for (Person person : people) { 
     writeToPage(person.toHtml()); 
    } 
    } 
}