将对象从基类转换为子类是否有效

Jac*_*yan 13 nhibernate inheritance

在我的应用程序中,我(如在许多其他应用程序中)一个被称为Contact任何人的实体.在最基本的层面上,这用于表示业务联系人.但是,它也可以用来代表公司的员工.并且还有一些特殊类型的员工(比方说有一个叫Manager)

我试图将其建模为一种有意义的继承关系.员工的姓名和地址就像联系人一样,以及一些与就业相关的属性.经理还拥有许多经理特定的属性.

当员工晋升为经理时,困难就出现了.可以将基类Employee转换为继承类Manager吗?感觉不对.我想我会用一个专门的构造函数来做Manager.

顺便说一句,NHibernate是否支持这种行为?是获得员工,从员工创建经理,然后保存经理这么简单吗?

Ter*_*cox 16

在这种情况下,我将继续使用组合而不是继承.如果您坚持继承,那么您将在每次升级或降级时更改课程,并且每次您雇用联系人或员工离开并成为常规联系人.

说联系人有角色更容易.您可以将管理员角色添加到联系人以进行升级,并删除角色以将其触发.


Jos*_*eph 5

只要您的商业模式与您的域名匹配,您就做得对了.

但是,听起来像你应该有类似的东西:

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如何将您的员工和经理映射到您的数据库与您的业务模型无关,除了如何映射它们.但这绝对与如何将员工提升为经理无关.