2010-05-25 5 views
3

Je suis studing asp.net mvc et dans mon projet de test j'ai quelques problèmes avec l'héritage: Dans mon modèle, je l'utilise inheritanse dans quelques entités:Asp.net contrôleurs d'héritage mvc

public class Employee:Entity 
    { 
     /* few public properties */ 
    } 

Il est le classe de base. descendants:

public class RecruitmentOfficeEmployee: Employee 
    { 
     public virtual RecruitmentOffice AssignedOnRecruitmentOffice { get; set; } 
    } 

public class ResearchInstituteEmployee: Employee 
    { 
     public virtual ResearchInstitute AssignedOnResearchInstitute { get; set; } 
    } 

Je veux mettre en œuvre un simple opérations CRUD à chaque descedant. Quel est le meilleur moyen d'implémenter les contrôleurs et les vues dans les descendants: - Un contrôleur par descendant; - Héritage du contrôleur;
- Contrôleur générique; - Méthodes génériques dans un contrôleur.

Ou peut-être qu'il y a un autre moyen? Mon ORM est NHibernate, j'ai un référentiel de base générique et chaque référentiel est son descripteur. L'utilisation d'un contrôleur générique, je pense, est le meilleur moyen, mais j'utiliserai uniquement le référentiel de base générique et l'extensibilité du système ne sera pas très bonne.

S'il vous plaît, aider les débutants)

Répondre

2

Cela dépend vraiment de combien logique partagée il est et comment votre besoin de votre application à l'écoulement.

Si la plupart de la logique est la même, je dirais réutiliser un seul contrôleur et créer des vues qui correspondent à chaque type hérité. Vous chargeriez le référentiel approprié, les objets de domaine et la vue en fonction du type. Le type peut être déterminé par un paramètre, un routage ou une autre recherche déterminée dans un filtre d'action.

Voici un exemple de le faire en passant dans un paramètre (l'OMI technique plus facile):

public class EmployeeController : Controller 
{ 
    public enum EmployeeType 
    { 
     RecruitmentOffice, 
     ResearchInstitute 
    } 

    public ActionResult Details(int id, EmployeeType type) 
    {    
     switch (type) 
     { 
      case EmployeeType.RecruitmentOffice: 
       // load repository 
       // load domain object 
       // load view specific to recruitment office 
       break; 
      case EmployeeType.ResearchInstitute: 
       // load repository 
       // load domain object 
       // load view specific to recruitment office 
       break; 
     } 
    } 
} 
Questions connexes