Domain driven design 领域设计问题

Domain driven design 领域设计问题,domain-driven-design,Domain Driven Design,我正在申请一个我可以担任老师、学生等角色的职位。有些功能是类似的,所以我也有一个基类用户。用户包含AddRole方法和其他内容 现在,我希望在创建Teacher对象时,自动将“Teacher”角色分配给该对象。我在构造器中做这件事,但我认为这很难看。代码如下: public class Teacher : User { public Teacher() { AddRole(new Role() { RoleName = "Teach

我正在申请一个我可以担任老师、学生等角色的职位。有些功能是类似的,所以我也有一个基类用户。用户包含AddRole方法和其他内容

现在,我希望在创建Teacher对象时,自动将“Teacher”角色分配给该对象。我在构造器中做这件事,但我认为这很难看。代码如下:

public class Teacher : User
    {
        public Teacher()
        {
            AddRole(new Role() { RoleName = "Teacher"});
        }
    }
数据库中没有教师表。一切都是基于用户的。教师只是一个角色,与学生有着不同的功能


我该怎么办

它在您的域模型中是如何工作的?任何适用于您的域模型的东西都应该在您的代码中。

如何

//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")
            {

            }
        }

实际上,
角色
表与
用户
表有1对m或m对m的关系是很常见的


实现在很大程度上取决于如何使用您的角色。它们是否具有与之相关的功能?还是仅仅是标签?你的角色是固定的还是动态的?根据它们的使用和定义方式,接口或继承可能适用于您的角色,或者实际的
Role
对象可能更好。

我喜欢这种方法。只是想知道我是否应该向用户构造函数发送一个字符串或RoleType枚举。谢谢我会使用某种枚举,这样可以避免使用神奇的字符串,并且比较运算符的功能是明确的和定义的。与其使用字符串或枚举,不如使用类型本身?例如,公共教师():用户(类型(教师角色))。这将消除保持类型/枚举同步的需要。另一种选择是使用Decorator+Factory/Builder模式,尽管事情可能会很快变得复杂起来!是的,AddRole()意味着不止一个角色。我认为Eric的意思是,一个角色也包含一个列表。