天儿真好,
如果你发现你有一个派生类中从一种类型转变成另一种派生类型然后就是,最初的设计有问题的气味。
我的直觉就是你不正确地表示一个Manager对象。
回到基础并以OO术语思考,您的基类(Contact)包含Employee和Manager对象的公共元素。任何派生的对象都只是基类的特化。
在这种情况下,员工的实例不是经理吗?
Manager和Employee类都应该有一个也是Employee类型的reportsTo数据成员。
我现在看到的唯一区别是Manager对象现在有一个Employee对象的集合,它们是它们自己的directReports。这应该可以实现为一个指向Employee对象的容器的指针。
我不能想到需要从Manager对象中分离出Employee对象的行为中的任何专业化。
嗯,也许使基类包含联系人详细信息的人。
编辑:对不起,从您的评论我猜我不够清楚。我所描述的不会导致直接从您的Contact类派生的两个单独的类,因此您必须在运行时将这个Employee的实例更改为Manager,这是您的原始问题。
也就是说,我认为你不应该有两个派生类,一个Employee和一个Manager,直接从你的Contact类继承。
这些公司雇用的人不是这两种情况吗?为什么区分经理和员工?如果员工成为经理,员工不再是员工吗?
有两个派生类,经理和员工,是完全错误的恕我直言。你有没有试过用“isa”和“有一个”关系来解决问题。然后你可以看到你的基本结构是错误的。
说一个员工“isa”联系只是没有意义。更有可能员工“isa”Person and Person“有一组”联系人详细信息。
也许派生Manager类作为员工的专业化?员工“isa”人。经理“isa”“isa”员工。
HTH
欢呼声,
NHibernate的问题只是为了找出NHibernate是否会抱怨将对象作为基类保存为子类。 – 2009-06-16 15:19:19