2009-08-12 66 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