文档章节

使用领域驱动设计心得(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
Linux 有什么好学的?

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

p23onzq
2017/12/03
0
0
C#进阶系列——DDD领域驱动设计初探(一):聚合

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

杰克.陈
2017/12/19
0
0
DDD领域驱动设计(Domain Driven Design)(转)

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

mcy247
2017/12/04
0
0
IT人生感悟与心得

  圣殿骑士自从入住博客园和51CTO写技术博客以来收获颇多,在这个过程中既对技术有了新的收获,同时也认识了很多朋友。之前由于工作和项目需要, 所以对一些技术进行了较为深入的研究,在整...

KnightsWarrior
2010/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

go语言学习总结

一、描述 go语言是直接将源码编译成二进制机器码的语言;它支持面向对象、也支持函数式编程;支持并发很容易; 二、基本语法学习路径 https://studygolang.com/subject/2...

盼望明天
22分钟前
1
0
JSP 九大内置对象及其作用域

JSP 中一共预先定义了 9 个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception ,下面就简单介绍下。 1、request 对象 request 对象...

几个栗子
34分钟前
0
0
Java中的坑之方括号

Java中的坑之方括号 这一段时间,在做项目的时候,发现了一个坑,这个坑说大不大,说小不小,不知道的足够喝一壶,知道的就可以轻松解决。 问题描述 在做数据统计的时候,遇见了如下形式的数...

星汉
44分钟前
1
0
[雪峰磁针石博客]python机器学习、web开发等书籍汇总

Building Machine Learning Systems with Python Third Edition - 2018.pdf 下载地址 Get more from your data by creating practical machine learning systems with Python Key Features ......

python测试开发人工智能安全
55分钟前
1
0
文件的压缩与解压(linux)

Linux下*.tar.gz文件解压缩命令 1.压缩命令:   命令格式:tar -zcvf 压缩后文件名.tar.gz 被压缩文件名 可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。 2.解压缩命令: ...

qimh
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部