Jac*_*yan 13 nhibernate inheritance
在我的应用程序中,我(如在许多其他应用程序中)一个被称为Contact任何人的实体.在最基本的层面上,这用于表示业务联系人.但是,它也可以用来代表公司的员工.并且还有一些特殊类型的员工(比方说有一个叫Manager)
我试图将其建模为一种有意义的继承关系.员工的姓名和地址就像联系人一样,以及一些与就业相关的属性.经理还拥有许多经理特定的属性.
当员工晋升为经理时,困难就出现了.可以将基类Employee转换为继承类Manager吗?感觉不对.我想我会用一个专门的构造函数来做Manager.
顺便说一句,NHibernate是否支持这种行为?是获得员工,从员工创建经理,然后保存经理这么简单吗?
Ter*_*cox 16
在这种情况下,我将继续使用组合而不是继承.如果您坚持继承,那么您将在每次升级或降级时更改课程,并且每次您雇用联系人或员工离开并成为常规联系人.
说联系人有角色更容易.您可以将管理员角色添加到联系人以进行升级,并删除角色以将其触发.
只要您的商业模式与您的域名匹配,您就做得对了.
但是,听起来像你应该有类似的东西:
Manager Promote(Employee employee)
{
var manager = new Manager();
//promote your employee to a manager here
return manager;
}
Run Code Online (Sandbox Code Playgroud)
在某种工作流程中.
关于NHibernate,听起来好像是在将ORM逻辑与业务领域混合在一起.将Employee提升为Manager是一种业务域构造,因此属于您的业务模型.但是,NHibernate如何将您的员工和经理映射到您的数据库与您的业务模型无关,除了如何映射它们.但这绝对与如何将员工提升为经理无关.