DDD中聚合根与聚合的概念

藍色回憶 2016-03-28 05:42:20
最近看到DDD这个话题,感觉很有意思,越深入研究越是疑惑,DDD是为了聚焦业务而设计的,但是我在做的过程中发现在Repositories持久化层有聚合根的概念,我看了很多文章,里面讲的大多都是一样的,聚合根存在的目的是为了不让聚合外的实体直接访问,需要通过聚合根来访问这个实体,但是我有几点不懂。
聚合根在我觉得很像是一个表的主键,网上都说到查找数据什么的都是通过聚合根来查的,但是在我遇到的项目中,都是通过一系列搜索条件来查找一个或多个实体的,我没觉得聚合根有什么优势啊?我设计的数据表中都有Guid类型的键,但是名字起的不是一样的,这样一来,我在使用的时候还需要将Guid类型的键更改名字,感觉好麻烦啊。另外是不是数据库的每一个表都对应一个聚合根?如果在entity中不继承领域模型的聚合根的话,没办法执行crud操作,但是如果实现了就要求数据库必须有这个属性,这个都怎么解决呀?
另外在什么时候需要用到仓储?Repositories层实现了domain的IRepositories接口,与数据库打交道,然后把数据取出来给应用层,为什么我觉得不用聚合根,不用这个仓储也挺简单的?在IRepositoryContext中定义了一个仓储上下文的Id,这个Id有什么作用,应该是区分是哪个数据源的吧,但是有没有地方会用到这个,能给举个例子吗?
...全文
7203 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluedoctor 2016-06-23
  • 打赏
  • 举报
回复
为什么我觉得不用聚合根,不用这个仓储也挺简单的? ---------------------------------------------------------------------------- 恭喜你发现问题了,也许你以后还会遇到聚合根不稳固的问题,那时候就更纠结了。 楼上也有朋友说,编程不能编成八股文,现在DDD这个东西,有点这个倾向。 面向自己的内心编程,抛弃哪些所谓的模式吧,怎么简单怎么来。
藍色回憶 2016-03-28
  • 打赏
  • 举报
回复
还有什么算是业务逻辑,应用层的主要功能是协助领域层,但是如果说有一个员工实体,要实现登陆场景,但是手机版不允许登陆,还有在早上八点前不允许登陆,除非账号是VIP用户,那这个查询员工等级信息是不是应该放到应用层,判断是不是手机版与判断八点前不允许登陆放到domain service中?
藍色回憶 2016-03-28
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
这个是跟领域和工作单元对应的,因为一个领域,一个单元不止操作一个实体。那么你要操作多个实体联合对外提供功能自然就得聚合了 当然我个人对这些所谓的“仓储模式”是毫不感冒滴,因为当编程这样一件事情变成了八股文,那个味道其实也不好。 对于那套东西来说,我个人只对eventbus这个东西有兴趣,其他滴玩意都有一股冲天滴“味道”。
之前没接触过领域模型,当时操纵多个实体的时候都是通过多表连接做的,虽然说根据一个聚合根来操作多个实体感觉挺对的,但是真实项目中不同实体也不是仅仅只通过一个聚合根就能找到的吧,另外对于一个项目来说,应该不止一个聚合根吧,可能是我理解的不对,这样子弄的话,如果数据库的表中没有这个名字的键的话,不是就会出错吗?
wanghui0380 2016-03-28
  • 打赏
  • 举报
回复
这个是跟领域和工作单元对应的,因为一个领域,一个单元不止操作一个实体。那么你要操作多个实体联合对外提供功能自然就得聚合了 当然我个人对这些所谓的“仓储模式”是毫不感冒滴,因为当编程这样一件事情变成了八股文,那个味道其实也不好。 对于那套东西来说,我个人只对eventbus这个东西有兴趣,其他滴玩意都有一股冲天滴“味道”。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧