我需要在我的實體中爲組織層次結構建模。一個組織可以是總部,區域負責人,分區域,區域辦事處。組織正在執行許多常用功能,但有幾種功能僅限於區域可以執行任務A.還有一些屬性(數據)是特定於區域的。組合與繼承。我哪裏做錯了?
我使用組合而不是繼承對其進行建模,但是現在我只結束了一個組織類,其中很多引用取決於組織類型可以具有有效引用或爲空。
對象組合是一種痛苦,現在我正在通過工廠來處理。但是現在我主要關心的是開發人員需要記住組織類型是什麼以及某個屬性是否對該組織有某種意義。
只是爲了清楚我的意思。
public class Organization : IKeyed<int> {
public virtual int Id { get; protected set; }
public virtual string Code { get; set; }
public virtual OrganizationType orgType {get;set;}
public virtual Organization Parent {get;set;}
public virtual IList<Organization> Children {get;set;}
public virtual typeA {get; set;} // only meaningful when organization type is 'Head office'
public virtual typeB {get;set;}// only meaningful when 'Region'
public virtual void AddChild(Organization org){...}
...
}
我應該在這裏使用繼承嗎?或者我在這裏錯過了一些技巧?
也許它可能更舒適和方便的有一個層次結構,並沒有TypeA/TypeB作爲基類屬性。我沒有看到這裏的組成..任何組織可以包含其他組織?即使如此,仍然可能在相關類中使用TypeA和TypeB將更容易使用 – YavgenyP
爲簡潔起見,我已經簡化了很多,忘記提及事實,即每個組織都有一個對Parent及其子組織的參考。 –
@YavgenyP TypeA和typeB引用的屬性僅在組織的類型稱爲Headoffice時有用。將會有很多其他引用僅在類型爲Region Region等時有效......等等 –