2010-05-25 3 views
3

나는 asp.net의 MVC를 공부하고 있어요 내 테스트 프로젝트에 나는 상속 몇 가지 문제가 있습니다 내 모델에서 을 나는 몇 기관에서 inheritanse를 ​​사용Asp.net MVC 상속 컨트롤러

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

는 그것은이다 기본 클래스. 그리고 후손 :

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

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

나는 모든 descedant에 대한 간단한 CRUD 작업을 구현하려는.

자손의 컨트롤러와 뷰를 보완하는 더 좋은 방법은 다음과 같습니다. - 모든 자손마다 하나의 컨트롤러. - 컨트롤러 상속;
- 일반 컨트롤러; - 하나의 컨트롤러에있는 일반적인 메소드.

아니면 다른 방법이 있을까요?

내 ORM은 NHibernate이고, 나는 일반 저장소를 가지고 있으며, 모든 저장소는 그것의 descedant이다. 필자는 제네릭 컨트롤러를 사용하는 것이 가장 좋은 방법이라고 생각합니다.하지만 기본 저장소 만 사용하고 시스템의 확장 성은 그리 좋지 않을 것입니다.

답변

2

정말이 방법과 희망 흐름 응용 프로그램 얼마나 많은 공유 논리에 따라 다름) 초보자를 도와주세요.

로직의 대부분이 같으면 단일 컨트롤러를 재사용하고 각 상속 된 유형과 일치하는보기를 생성합니다. 유형에 따라 적절한 저장소, 도메인 개체 및보기를로드합니다. 유형은 매개 변수, 라우팅 또는 조치 필터에서 결정된 다른 룩업에 의해 판별 될 수 있습니다.

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; 
     } 
    } 
} 
: 여기

는 파라미터 (가장 쉬운 방법 IMO)를 통과시킴으로써 그 일의 예