发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

聚合内存在集合应该如何修改?

    
2014-01-22 10:23
赞助商链接

Hi,各位,我想请问一下,如果一个聚合之内存在一个多重的关系,例如:
Resource(1)--->(*)Content
其中Resource是聚合根,Content是聚合根内一个实体

如果我需要将持久化的Resource取出这很简单,通过ResourceRepository将Resource及其对应的Content取出再组合成一个完整的对象即可

现在问题是,如果我需要添加一个Content,我应该如何实现?

逻辑上新增(管理)Content是Resource中的职责,那么就会有如下方法:

public class Resource
{
public void Add(Content content);
}

这样在内存中的Resource实体的确修改了,但是,如果我想将其持久化(例如存储至数据库),我应该如何实现?
如果是在ResourceRepository中加入Update(Resource resource)方法,这个方法我该如何实现,因为这个方法内无法快速发现我新增了哪个Content。

请问,我应该如何正确地实现更新聚合内集合这样的操作(在非EventSourcing的结构下)?

2014-01-23 08:51

这是具体持久技术的问题 ,无关设计,嫌麻烦可用hibernate的merge方法

2014-01-24 09:37

@banq 是的,的确是持久化技术的问题。
但是就是这一点,我在设计仓储的时候就有点疑惑,增和删两种操作都好说,它们都是对于整个聚合的根而言的,而只有修改这操作我设计了接口,却不知道如何实现。
请@banq指教一二

2014-01-24 09:47

2014-01-24 09:37 "@JasonMing"的内容
只有修改这操作我设计了接口 ...


聚合根的修改一般都是由聚合根自身的行为来完成,因为修改的粒度通常很细,一般采取事件驱动比较好,否则的话,只能采取类似Hibernate的merge方法,你在仓储修改方法中获得聚合根后,一个个打开子对象,与缓存中比较是否更改,修改了就单独修改那个对象对应的数据表,这等同于merge原理,不用NHibernate的话就是脏活累活,没法回避。

DDD仓储     

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com