我正在研究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,我有一个通用的基础存储库,每个存储库都是它的必需品。我认为使用通用控制器是最好的方法,但在其中我将只使用通用基础存储库,系统的可扩展性将不是很好。
请帮助新手)
答案 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;
}
}
}