2012-01-06 64 views
1

有關解決此設計問題的乾淨方法的任何建議?表繼承:設計建議?

public class Task 
{ 
    public User Assignee 
    public User Assigner 
} 

public class User 
{ 
    public string Name 
} 

所以一個任務有兩個用戶。但是,現在我們要添加支持組......

public class Group 
{ 
    public string Name 
    public IEnumberable<User> Users 
} 

而且我們希望任務能夠處理一組作爲受讓人

public class Task 
{ 
    public User/Group Assignee 
    public User Assigner 
} 

當我想在這裏傳承。組「是一種」用戶不符合此LSP的原因,因爲組「不能被」用戶

可替換「我正在使用實體框架(模型優先)。

回答

1

Group不是User。這是不正確的建模。如果你需要繼承定義一個新的頂級抽象的實體 - 例如Identity並從該實體獲得UserGroup

public class Task 
{ 
    public Identity Assignee 
    public User Assigner 
} 
2

爲什麼不

public class Task 
{ 
    public Group Assignee 
    public User Assigner 
} 

,其中有單個用戶Group取代了單一User

+1

我似乎總是發現自己的一組1 ... – cdeszaq 2012-01-06 16:17:52

+0

在你這種情況下不要在根本不需要'Group',你可以使用'ICollection '。 – 2012-01-06 16:33:44

+0

@LadislavMrnka爲什麼在這種情況下有所不同?這是什麼**這種情況?我懷疑這是他的整個代碼。 – 2012-01-06 16:35:23