Asp.net mvc继承控制器

时间:2010-05-25 17:56:46

标签: asp.net-mvc inheritance controller

我正在研究asp.net mvc,在我的测试项目中,我遇到了一些继承问题: 在我的模型中,我在几个实体中使用了inheritanse:

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; }
    }

我想对每个潜意识者实施一个简单的CRUD操作。

在后代中使用控制器和视图的更好方法是什么:   - 每个后代一个控制器;   - 控制器继承;
  - 通用控制器;   - 一个控制器中的通用方法。

或许还有另一种方式?

我的ORM是NHibernate,我有一个通用的基础存储库,每个存储库都是它的必需品。我认为使用通用控制器是最好的方法,但在其中我将只使用通用基础存储库,系统的可扩展性将不是很好。

请帮助新手)

1 个答案:

答案 0 :(得分:2)

这实际上取决于共享逻辑的数量以及您希望应用程序如何流动。

如果大多数逻辑是相同的,我会说重用一个控制器并创建匹配每个继承类型的视图。您可以根据类型加载相应的存储库,域对象和视图。类型可以通过参数,路由或在操作过滤器中确定的其他查找来确定。

这是通过传入参数(最简单的技术IMO)来做到这一点的例子:

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;
        }
    }
}