2012-11-01 49 views
1

假設您有一個類別用戶表示某個服務的用戶。還有兩種類型的用戶在系統中的角色有所不同。繼承與未使用的關聯

有多種與用戶關聯的信息類別。有些類別與所有用戶相關,有些僅與一種類型的用戶有關。

我想代表我的域名用戶及其相關信息,我有以下問題:

我看到的最簡單的模型是隻使用一個類叫用戶代表所有用戶(不管用戶的種類)。不同類別的信息由多個類別表示,每個類別一個。 User類與這些類中的每一個都有一個複合關聯。 (由於該信息僅因爲該用戶存在而存在,因此信息僅存在)。

但是,由於信息類別可能與特定用戶無關,所以該關聯對於該用戶而言將是不相關的,因此將爲空。

這是不好的做法?我應該爲每種用戶貢獻一個課程,並且定義與兒童級別信息類別的關聯嗎?

感謝

+1

您的方法可能是完全合理的,但您必須指定用戶將要執行的操作。用戶所包含的數據是基於其需要執行的實現細節。 –

回答

1

一般來說是有利於composition over inheritance好的做法。沒有充分的背景下,這個問題就無法得到回答。無論您提出的設計是否是一個好的設計,都取決於您希望使用這些類的方式以及系統其餘部分的外觀。例如,如果您想明確檢查任何用戶的給定類別是否適用並且類別相當固定,則這可能是一個不錯的選擇。但是,如果例如類別是非常動態的(他們來來去去,該系統的發展),這可能是一個更好的主意來建模的類別一一對多關聯,是這樣的:

class User 
{ 
    Collection<Category> getCategories() 
    bool HasCategory(Category) 
} 
1

我只會創建您的用戶類中的一個類別屬性。你可以有多個類別類,但我會嘗試使用繼承或接口來定義你的類別的共同點。這將保持你的代碼流暢而有序。

如果此屬性爲null並且您的用戶類不需要每個類別都有一個屬性,那麼這不是不好的做法。您可以在您的User類中使用基類屬性,稍後可將它們摺疊到用戶所擁有的數據類別中。一個簡單的整數或枚舉可以伴隨這個類,並且可以用來確定這個類在實際使用它時需要什麼類型的數據。

希望這會有所幫助!