文档章节

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

zhuzhuguang
 zhuzhuguang
发布于 2014/11/12 15:24
字数 628
阅读 46
收藏 1
点赞 0
评论 0

关于聚合

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

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

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

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


关于事件驱动开发

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

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

© 著作权归作者所有

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

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

杰克.陈 ⋅ 2017/12/05 ⋅ 0

C#进阶系列——DDD领域驱动设计初探(一):聚合

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

杰克.陈 ⋅ 2017/12/19 ⋅ 0

Linux 有什么好学的?

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

p23onzq ⋅ 2017/12/03 ⋅ 0

DDD领域驱动设计(Domain Driven Design)(转)

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

mcy247 ⋅ 2017/12/04 ⋅ 0

关于聚合设计与cqrs

记得在去年的时候,也就是14年下半年的时候,那个时候第一次系统得学习领域驱动设计。在此之前,从《企业应用架构模式》中对领域驱动的设计,有所耳闻,并自己瞎摸索实践了,有大概一年。 后...

本然 ⋅ 2015/05/17 ⋅ 0

人生感悟与心得

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

IT人生感悟与心得

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

KnightsWarrior ⋅ 2010/10/25 ⋅ 0

[.NET领域驱动设计实战系列]专题十一:.NET 领域驱动设计实战系列总结

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

杰克.陈 ⋅ 2017/12/05 ⋅ 0

基于SOA 思想下的WebService实战资料分享

跟大家分享基于SOA 思想下的WebService实战(电子商务需求,分析,架构全涉及,百万数据优化) 课程讲解内容涵盖: 第1章 CXF框架快速起步(2课时) Webservice技术规则 Java-WebService技术规范...

abcfhl ⋅ 2013/06/24 ⋅ 7

C#进阶系列——DDD领域驱动设计初探(四):WCF搭建

原文:C#进阶系列——DDD领域驱动设计初探(四):WCF搭建 前言:前面三篇分享了下DDD里面的两个主要特性:聚合和仓储。领域层的搭建基本完成,当然还涉及到领域事件和领域服务的部分,后面再...

杰克.陈 ⋅ 2017/12/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 7分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 16分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 18分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 18分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 25分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 26分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 30分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 35分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 39分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 42分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部