天兒真好,
如果你發現你有一個派生類中從一種類型轉變成另一種派生類型然後就是,最初的設計有問題的氣味。
我的直覺就是你不正確地表示一個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