用户和角色多对多问题,对象间关联处理问题
最近刚开始在学习DDD,想在项目中实践下,现在在弄权限管理部分,在建立用户和角色模型时候,经过分析后得出
(1)用户对象和角色对象是对多对关系,模型中加了个关联类叫角色分配类(就是给用户分配一个或多个角色)
(2)因为没有具体业务需求,我决定在界面上在添加用户时候为该用户分配一个多个角色,把用户和分配关系当成一个聚合进行持久化,替换更新,得出下面类
用户(用户账号,密码,角色分配列表,获取所有角色方法)
角色分配(用户,角色)
角色(角色名称)
这样行吗?
(3)因为一般只会关心用户有哪些角色,而不会关心一个角色有哪些用户使用,所以角色里没有用户列表和角色分配类列表;
用户和角色分配组成一个聚合,用户是聚合根,角色分配是聚合里的值对象,这样做可以吗
(4)我在做登录验证时候,通过界面调用应用服务层的方法
Login(string userAccount, string password)
{
调用UserRepository里的FindUserByUserAccountPassword(userAccount, password)
获取User领域对象,根据是否为空判断是否通过验证
}
这个用户登录功能的实现方式对吗?
因为聚合是一个整体,一起持久化,一起更新,是否一起查询出来,如果是一起查询出来,FindUserByUserAccountPassword我就准备建个视图,把用户,角色,用户角色关联表一起关联起来,查询出来,构建出用户对象,用户关联对象,角色对象,而我现在只是验证账号和密码是否有 ,按照以前做法只需要验证用户表,所以在这里FindUserByUserAccountPassword是否只构建用户对象,而不构建聚合里的值对象就是角色关联对象,一个是查询性能好,这是否违背DDD的聚合原理?
(5)另外我如果要在用户和一个员工关联,也就是把这个用户指定给了一个员工,员工有员工姓名和员工编号,我认为员工是单独的实体,假设员工和用户是一对一关联关系,那么用户就变成
用户(用户账号,密码,角色分配列表,获取所有角色方法,员工)
员工(员工姓名,员工编号)
这样在用户里引用了员工对象应该是对的吧,现在的问题是用户和员工之间应该是没有聚合关系,当我查询一个用户领域对象的时候,根据聚合概念不应该把员工对象构建出来,但是我有需求当登录后,要在界面上显示用户对应的员工的姓名和员工工号,那我怎么去获取这个信息呢?难道分两次去读取操作,另外领域对象查询出来后的操作是在内存里操作的,而其领域内不应该涉及技术性的东西,不能在领域对象内有使用Repository的功能,看了些资料说在service(不知道是应用服务,还是领域服务)再去调用员工的Repository去读取相关信息,这样的话是不是太麻烦,还要两次读取数据库,标准做法是什么样的?
总结下,就是DDD怎么处理处理各种聚合根间的关联或者说是对象间的非聚合引用关系
请各位老师指教下,比较具体的问题,真是有点迷惑,非常感谢