文档章节

使用领域驱动设计心得(2)

zhuzhuguang
 zhuzhuguang
发布于 2014/11/12 15:24
字数 628
阅读 47
收藏 1

关于聚合

聚合从业务意义上讲,就是一组实体和值对象,其中有一个根实体,访问其他的实体和值对象只能通过根实体。从关系上讲,其他的实体和值对象围绕根实体,附属于根实体,聚合外的其他聚合和实体,不能直接和非根实体通信。如汽车、车门、轮胎就构成一个聚合,其中汽车是根实体,车门和轮胎都是值对象,车门和轮胎不能抛弃汽车主体单独和其他聚合通信。

聚合从技术意义上讲,他是一个事务单元,也就是聚合内部的实体和值对象,要同时产生,同时回滚。

因此在设计一个聚合的时候,要特别考虑聚合的技术意义,因为很多模型看似是一个聚合,但是并不能同时提交,这时设计成多个聚合更好。比如个人信息中,教育背景、工作背景,如果认为是个人信息聚合下的2个实体,那么在进行持久化操作的时候就必须在一个事务下,这样会导致工作背景出错,教育背景也需要重新保存,如果认为2者可以单独保存的话,设计成2个聚合更合适。

聚合之间的通信或者多个聚合相继持久化,最好为异步完成,多个聚合多个事务。


关于事件驱动开发

事件驱动开发往往和领域驱动一起使用,但是领域驱动设计不一定是事件驱动的。在领域驱动中,一个操作需要多个聚合完成时,使用事件驱动比较合适。第一个聚合完成任务后,发布领域事件,其他聚合可以监听这个领域事件,事件发生时,通知所有监听的聚合,这是一种典型的观察者模式。其他聚合完成时,再发布自己的事件,这样形成一个事件链。

事件驱动的好处是,非常的松耦合,可同步、可异步,同步事件可以使用普通的程序完成,异步事件可以使用消息服务。聚合之间可以发布异步事件。缺点是有时差,并且整个系统会变得稍复杂。

© 著作权归作者所有

共有 人打赏支持
zhuzhuguang
粉丝 3
博文 24
码字总数 6185
作品 0
朝阳
程序员
基于事件驱动的DDD领域驱动设计框架分享(附源代码)

原文:基于事件驱动的DDD领域驱动设计框架分享(附源代码) 补充:现在再回过头来看这篇文章,感觉当初自己偏激了,呵呵。不过没有以前的我,怎么会有现在的我和现在的enode框架呢?发现自己进...

杰克.陈
2017/12/05
0
0
C#进阶系列——DDD领域驱动设计初探(一):聚合

原文:C#进阶系列——DDD领域驱动设计初探(一):聚合 前言:又有差不多半个月没写点什么了,感觉这样很对不起自己似的。今天看到一篇博文里面写道:越是忙人越有时间写博客。呵呵,似乎有点...

杰克.陈
2017/12/19
0
0
Linux 有什么好学的?

首先 Linux 是开源免费的,用户不需要为此交付任何费用,世界各地有数百万志愿者为 Linux 提供了技术支持和软件更新,这使得 Linux 无论是在桌面还是在服务器端都是其他 OS 无法企及的。 世界...

p23onzq
2017/12/03
0
0
DDD领域驱动设计(Domain Driven Design)(转)

摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces、Applications和Domain三层以及包含各类基础设施的 Infrastructure。本文会对架构中一些重要组件...

mcy247
2017/12/04
0
0
[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

原文:[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结 一、引用   其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计、领域...

杰克.陈
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
0
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
0
0
学习设计模式——中介者模式

1. 认识中介者模式 1. 定义:用一个中介对象来封装一系列的对象交互行为,中介者使得各对象不需要显式的互相引用,从而使其松散耦合,独立的改变他们之间的交互。 2. 结构: Mediator:中介者...

江左煤郎
昨天
0
0
深入理解Plasma(1):Plasma 框架

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章作为开篇,主要目的是理解 Plasma 框架。 Plasma 作为以太坊的二层扩容...

HiBlock
昨天
0
0
Java 8 日期 示例

Java 8 推出了全新的日期时间API。Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。Java也意识到需...

阿刚ABC
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部