2010-04-27 108 views
1

我有一個場景需要我的建議。我有一個應用程序,其中有兩種用戶學生和教師。學生和老師分享一些常見的屬性,如名字,姓氏,電子郵件,用戶名,密碼等。因此,我從用戶派生學生和老師班。域驅動設計問題

現在,問題是,有些時候我真的不知道,如果用戶是學生或老師。就像在實現自定義成員資格提供程序和GetUser函數時一樣。 GetUser接受用戶名,但現在我失去了該返回的內容。

對於學生功能,我爲教師創建了IStudent和ITeacher。但是有時候我只想要返回一個用戶,不關心他是學生還是老師。但是,然後返回基類似乎不是一個好主意。

UPDATE:

我認爲這是返回用戶不錯的主意,甚至沒有學生和教師類。學生和老師只是角色,可以由StudentServices和TeacherServices進行管理。

+0

爲什麼返回一個User類型的對象是個壞主意?這似乎是合乎邏輯的解決方案 - 特別是對於getUser()的調用; – quoo 2010-04-27 16:51:44

+0

而你的問題是? – Oded 2010-04-27 16:52:22

+0

查看我更新的問題! – azamsharp 2010-04-27 17:23:19

回答

1

一個典型的場景和經典的失控問題。是的,隨着他們的限制,繼承工作總會有痛苦。但是,當你將行爲注入你的課堂時會發生益處。現在看起來你已經決定使用User類而不是User作爲基礎,並且沒有孩子班級Teacher and Student。如果你讓老師和學生擔任角色,但在單獨的服務中處理它們,這可能是一個好主意......好吧,這聽起來是我的看法。您可能最終會在這些服務中出現重複的代碼,因爲它們都需要處理用戶邏輯。

事實是,如果您開始通過在服務層進行補償來抵禦這種困難,那就是通向貧血域模型的道路,其中邏輯從域層泄漏到gui或服務層。 什麼是師生獨特的,什麼邏輯/行爲不同應該在領域層表現出來。

你可以使用繼承(也許是最好的解決方案)或將它們作爲一個角色,讓你將角色定製爲一個自定義Enum - 看看(我認爲)Jimmy Bogard如何用行爲擴展一個自定義Enum。