最近学习DDD关于工厂和仓储没搞懂

qq_23230739 2018-09-16 11:58:57
第一、DDD的设计中,领域内有工厂和仓储,工厂负责创建对象,仓储负责访问数据库重建对象和对象持久化。访问数据库的逻辑封装在仓储中了,但是工厂创建对象的时候如果需要读取数据库的数据怎么办?我想着坚持分清两者的职责,但是能想象到用到工厂的时候会需要读取数据。

第二、A领域的聚合需要B领域的数据,那么A领域仓储是否能访问B领域的数据表,我想既然将业务对象和数据库分离了,加上仓储实现已经不在领域层而在基础设施层了,那么应该是可以的。但是无论是《实现领域驱动设计》还是《领域驱动设计-软件核心复炸性的应对之道》都没有明确提出可以这么操作,所以这是否可行。


在网上查了下,也没找到想要的答案。
...全文
644 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
逸轩_ 2019-05-31
  • 打赏
  • 举报
回复
引用 3 楼 qq_23230739 的回复:
[quote=引用 2 楼 benxiaohai529 的回复:] A领域 的仓储是不能访问B领域的数据表的,领域设计中也有业务,如果非得需要的话用聚合的方式
用聚合的方式是什么意思呢?我的理解是仓储创建聚合根,聚合根里有实体和值对象,其中值对象可以是其他领域的信息。只能提供给本领域的聚合作业务判断,或者业务数据来源。因此,仓储就得能访问其他领域的数据表,才能构造出本领域的值对象。[/quote] 根据迪米特法则,强调的最小知识原则,如果你的值对象是另一个聚合根,那你这个值对象应该只保留唯一标识。如果A领域中需要B领域的数据,那么应该在接口方法被调用时,使用A领域中值对象去查询B领域聚合根所需的数据,当做参数传入接口方法。
qq_23230739 2018-12-02
  • 打赏
  • 举报
回复
引用 2 楼 benxiaohai529 的回复:
A领域 的仓储是不能访问B领域的数据表的,领域设计中也有业务,如果非得需要的话用聚合的方式
用聚合的方式是什么意思呢?我的理解是仓储创建聚合根,聚合根里有实体和值对象,其中值对象可以是其他领域的信息。只能提供给本领域的聚合作业务判断,或者业务数据来源。因此,仓储就得能访问其他领域的数据表,才能构造出本领域的值对象。
benxiaohai529 2018-10-30
  • 打赏
  • 举报
回复
A领域 的仓储是不能访问B领域的数据表的,领域设计中也有业务,如果非得需要的话用聚合的方式
qq_23230739 2018-09-18
  • 打赏
  • 举报
回复
顶一下,求DDD大神看到

3,405

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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