没有合适的资源?快使用搜索试试~ 我知道了~
首页DDD分层架构的三种模式.
资源详情
资源评论
资源推荐

DDD 分层架构的三种模式
_
张晓龙
_
关注
2017.07.16 18:57*
字数
7090
阅读
5159
评论
4
喜欢
51
引言
在讨论 DDD 分层架构的模式之前,我们先一起回顾一下 DDD 和分层架构的相
关知识。
DDD
DDD(Domain Driven Design,领域驱动设计)作为一种软件开发方法,它可
以帮助我们设计高质量的软件模型。在正确实现的情况下,我们通过 DDD 完成
的设计恰恰就是软件的工作方式。
UL(Ubiquitous Language,通用语言)是团队共享的语言,是 DDD 中最具威
力的特性之一。不管你在团队中的角色如何,只要你是团队的一员,你都将使
用 UL。由于 UL 的重要性,所以需要让每个概念在各自的上下文中是清晰无歧
义的,于是 DDD 在战略设计上提出了模式 BC(Bounded Context,限界上下
文)。UL 和 BC 同时构成了 DDD 的两大支柱,并且它们是相辅相成的,即 UL
都有其确定的上下文含义,而 BC 中的每个概念都有唯一的含义。
一个业务领域划分成若干个 BC,它们之间通过 Context Map 进行集成。BC 是

一个显式的边界,领域模型便存在于这个边界之内。领域模型是关于某个特定
业务领域的软件模型。通常,领域模型通过对象模型来实现,这些对象同时包
含了数据和行为,并且表达了准确的业务含义。
从广义上来讲,领域即是一个组织所做的事情以及其中所包含的一切,表示整
个业务系统。由于“领域模型”包含了“领域”这个词,我们可能会认为应该为整个
业务系统创建一个单一的、内聚的和全功能式的模型。然而,这并不是我们使
用 DDD 的目标。正好相反,领域模型存在于 BC 内。
在微服务架构实践中,人们大量地使用了 DDD 中的概念和技术:
1. 微服务中应该首先建立 UL,然后再讨论领域模型。
2. 一个微服务最大不要超过一个 BC,否则微服务内会存在有歧义的领域概念。
3. 一个微服务最小不要小于一个聚合,否则会引入分布式事务的复杂度。
4. 微服务的划分过程类似于 BC 的划分过程,每个微服务都有一个领域模型。
5. 微服务间的集成可以通过 Context Map 来完成,比如 ACL(Anticorruption
Layer,防腐层)。
6. 微服务间最好采用 Domain Event(领域事件)来进行交互,使得微服务可
以保持松耦合。
7. ...
分层架构
分层架构的一个重要原则是每层只能与位于其下方的层发生耦合。分层架构可
以简单分为两种,即严格分层架构和松散分层架构。在严格分层架构中,某层

只能与位于其直接下方的层发生耦合,而在松散分层架构中,则允许某层与它
的任意下方层发生耦合。
分层架构的好处是显而易见的。首先,由于层间松散的耦合关系,使得我们可
以专注于本层的设计,而不必关心其他层的设计,也不必担心自己的设计会影
响其它层,对提高软件质量大有裨益。其次,分层架构使得程序结构清晰,升
级和维护都变得十分容易,更改某层的具体实现代码,只要本层的接口保持稳
定,其他层可以不必修改。即使本层的接口发生变化,也只影响相邻的上层,
修改工作量小且错误可以控制,不会带来意外的风险。
要保持程序分层架构的优点,就必须坚持层间的松散耦合关系。设计程序时,
应先划分出可能的层次,以及此层次提供的接口和需要的接口。设计某层时,
应尽量保持层间的隔离,仅使用下层提供的接口。
关于分层架构的优点,Martin Fowler 在《Patterns of Enterprise Application
Architecture》一书中给出了答案:
1. 开发人员可以只关注整个结构中的某一层。
2. 可以很容易的用新的实现来替换原有层次的实现。
3. 可以降低层与层之间的依赖。
4. 有利于标准化。
5. 利于各层逻辑的复用。
“金无足赤,人无完人”,分层架构也不可避免具有一些缺陷:

1. 降低了系统的性能。这是显然的,因为增加了中间层,不过可以通过缓存机
制来改善。
2. 可能会导致级联的修改。这种修改尤其体现在自上而下的方向,不过可以通
过依赖倒置来改善。
在每个 BC 中为了凸显领域模型,DDD 中提出了分层架构模式。最近几年,笔
者在实践 DDD 的过程中,也经常使用分层架构模式,本文主要分享 DDD 分层
架构中比较经典的三种模式。
模式一:四层架构
Eric Evans 在《领域驱动设计-软件核心复杂性应对之道》这本书中提出了传
统的四层架构模式,如下图所示:

ddd-l4.png
1. User Interface 为用户界面层(或表示层),负责向用户显示信息和解释用
户命令。这里指的用户可以是另一个计算机系统,不一定是使用用户界面的
人。
2. Application 为应用层,定义软件要完成的任务,并且指挥表达领域概念的对
象来解决问题。这一层所负责的工作对业务来说意义重大,也是与其它系统
的应用层进行交互的必要渠道。应用层要尽量简单,不包含业务规则或者知
识,而只为下一层中的领域对象协调任务,分配工作,使它们互相协作。它
没有反映业务情况的状态,但是却可以具有另外一种状态,为用户或程序显
示某个任务的进度。
剩余32页未读,继续阅读















wudaoguang123
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
最新资源
- Xilinx SRIO详解.pptx
- Informatica PowerCenter 10.2 for Centos7.6安装配置说明.pdf
- 现代无线系统射频电路实用设计卷II 英文版.pdf
- 电子产品可靠性设计 自己讲课用的PPT,包括设计方案的可靠性选择,元器件的选择与使用,降额设计,热设计,余度设计,参数优化设计 和 失效分析等
- MPC5744P-DEV-KIT-REVE-QSG.pdf
- 通信原理课程设计报告(ASK FSK PSK Matlab仿真--数字调制技术的仿真实现及性能研究)
- ORIGIN7.0使用说明
- 在VMware Player 3.1.3下安装Redhat Linux详尽步骤
- python学生信息管理系统实现代码
- 西门子MES手册 13 OpcenterEXCR_PortalStudio1_81RB1.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

评论0