2009-08-12 65 views
0

我正在研究一個我可以有教師,學生等角色的應用程序。一些功能是相似的,所以我也有一個基類用戶。用戶包含AddRole方法和其他東西。域名設計問題

現在,我希望當教師對象被創建時,「教師」角色被自動分配給對象。我在構造函數中這樣做,但我認爲這很醜陋。下面是代碼:

public class Teacher : User 
    { 
     public Teacher() 
     { 
      AddRole(new Role() { RoleName = "Teacher"}); 
     } 
    } 

有一個在數據庫中沒有教師表。一切都是基於用戶的。教師只是一個角色,與學生有不同的功能。

我該怎麼辦?

回答

2

如何

//C++ look alike pseudocode 
    public class User{ 
     String role; 

     User (role_){role = role_;} 

     String getRole(){return role;} 

    } 


    public class Teacher : User 
     { 
      public Teacher():User("Teacher") 
      { 

      } 
     } 
+0

我喜歡這種方法。只是想知道我是否應該向User構造函數發送一個字符串或RoleType枚舉。謝謝! – azamsharp 2009-08-12 03:29:45

+0

我會用某種枚舉,避免使用魔術字符串,並且比較運算符的功能是清晰明確的。 – Tom 2009-08-12 03:31:18

+0

而不是使用字符串或枚舉,那麼使用類型本身呢?例如。公共教師():用戶(typeof(TeacherRole))。這將消除保持類型/枚舉同步的需要。 另一種方法是使用Decorator + Factory/Builder模式,儘管事情可能會非常迅速地變得複雜。 – 2009-08-12 07:33:03

0

它是如何在您的域模型中工作的?無論您的域模型適用於您的代碼。

0

這其實很常見的,有一個1到M或與User表M-到-M關係的Role表。

實施很大程度上取決於您的角色將如何使用。他們有與之相關的功能嗎?或者他們只是標籤?你的角色是固定的還是動態的?根據它們的使用和定義方式,接口或繼承可能適用於您的角色,或者實際的對象可能會更好。

+0

這就是我想知道的,爲什麼只有一個角色? – Eric 2009-08-12 03:57:14

+0

其實我有一個IList 這將保存一個角色列表! – azamsharp 2009-08-12 04:10:10

+0

是的,AddRole()意味着多個角色。我認爲Eric的意思是,通常很安靜,一個角色也包含一個列表。 – aberrant80 2009-08-13 09:13:20