天天看点

DDD:聚合根的批量删除是不是可以批量发送请求

搞了近五年的系统开发,总是抱着一种思维模式,用户的一个操作对应一个请求和一个事务,比如:用户选择了N条记录,我就会向服务器发生一个请求,服务器在一个事务中进行处理。前几天在群里一个前辈反问:批量操作难道真的要在一个事务中?这个问题让陷入了反思,谢谢前辈们(魏琼东)。

DDD中有聚合的概念,一个聚合有且只有一个聚合根和一些其他实体,如:订单聚合中,订单是聚合根,订单明细是聚合内的实体。因为DDD中只能操作聚合根,这篇文章就介绍聚合根的批量删除问题。有人问聚合内的实体的删除咋弄?聚合内实体的删除必须伴随着聚合根的修改(这里不做详细介绍)。

另外一点是需要注意的是,引入工作单元之后,批量操作和单个操作服务器端的逻辑是不同的,如:索引验证问题和工号生成问题(这里不做详细介绍)。

我目前有三种选择,我记录下来,然后一个一个分析:

发送一个请求,服务器一个事务。

发送一个请求:服务器N个事务。

发送N个请求,服务器N个事务。

这是我之前采用的思路,现在觉得非常不好,为什么非要在一个事务中呢?如果您觉得非要在一个事务中,就告诉我一声。

这种思路可以接受,不过要在服务器端做额外的处理,如:收集哪些失败或成功的信息,发生给客户端,如果我不用AJAX,我就会选择这个方案。

考虑到我是AJAX编程,这种思路好,重分利用了客户端。

思路有了,实现就不是问题了,搞个队列排队发送请求就行了,当然你可以选择并行发送请求或分批次排队发送请求。

DDD:聚合根的批量删除是不是可以批量发送请求
DDD:聚合根的批量删除是不是可以批量发送请求

这里只是演示了批量删除,有很多针对聚合根的批量操作都可以这么处理。

框架地址:http://happy.codeplex.com

继续阅读