文档章节

(1) 基于领域分析设计的架构规范 - 改变与优势

不知道自己什么不知道
 不知道自己什么不知道
发布于 07/09 15:07
字数 916
阅读 981
收藏 31

本系列目录:

  1. 改变与优势
  2. 领域分析基础
  3. 读写隔离
  4. 充血模型之实体
  5. 充血模型之Service
  6. 关于重构与落地

前言

大家好,我是一名普普通通的后端研发。

领域驱动设计(Domain Driven Design,DDD)是我大学开始就接触的概念,但一直到工作这么久了,却一直感觉像是雾里看花,仿佛懂了,却一直找不到说服自己用它的理由。

一年前,我又一次开始重新审视这个概念。终于,这一次,我结合实际项目场景和DDD的理念后,分析出一个以DDD为基础的编码规范。它不是一个很具象的技术组件,而更侧重于领域的分析,代码结构的编排等。

作为第一篇文章,我直接见山,介绍它在开发中的改变以及所带来的优势。

开发中的改变

  1. 读写隔离:查询操作与命令操作(增删改)通过文件(如Java的class)进行强制隔离
  2. 充血模型:实体类中允许出现行为操作,如order.cancel()

带来的优势

读写隔离

  1. 对查询来说,采用ReadOnly=true,从代码规范上“强制”保证查询的纯净性与无害性
  2. 系统真正的流程变动都在命令,所以保证业务流程的聚焦,不受到查询的干扰
  3. 查询【重性能-轻事务】,修改则反之,不同的模块隔离,更便于框架进行统一优化,比如代码复用性,AOP优化,安全权限等等
  4. 如果为了性能考虑,要进行物理持久化层面的读写分离,也很方便

充血模型

  1. 明确领域责任划分,实体更具有实际意义,更符合面向对象的设计理念;
  2. 在长事务,复杂处理的过程中,可读性更强;

欢迎拍砖

这个规范,仅仅是参考DDD的部分思路,并非完全照搬DDD,因为领域分析里有太多太多概念,而且由于是一种非常抽象的分析模式,无法量化,更难形成标准。所以,我在这里只是吸取了其中一部分思路,然后以充血模型为基础,并给出一些可以量化的标准,来让团队更容易将这个规范落地。

所以,某成程度来说,它或许已经不是DDD的范畴了。

总之:

  • 我写下本系列的几篇小文,算不上什么高深的技术文章,更多的是一个探讨与尝试,因为我个人真的挺喜欢这种分析和编码方式,所以想分享给大家;
  • 而正式由于DDD的思维方式和编码方式和常规做法的差距较大,很容易让大家无法短时间适应,但我恰恰就想通过这个过程,了解大家的反馈和质疑,因为我也想知道,这个东西,真正落地,还有哪些困难;
  • 所以,欢迎大家,文明拍砖,哈哈,如果有问题,能够给出具体的实际例子进行讨论更好。

感谢! 从下一篇开始进入正题:领域分析基础

© 著作权归作者所有

不知道自己什么不知道
粉丝 27
博文 6
码字总数 11878
作品 0
长沙
高级程序员
私信 提问
DDD~概念中的DDD

概念中的DDD DDD: 领域驱动设计,它是对面向对象的的分析和设计(OOAD,Object Orient Analysis Design)的一个补充,对技术框架进行了分层规划,同时对每个类进行了策略和类型划...

mcy247
2017/12/05
0
0
基于SOA 思想下的WebService实战资料分享

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

abcfhl
2013/06/24
1K
7
(猎头)上海名企聘20W-50W--Java、C++、PHP架构,Hadoop、数据开发、广告算法、数据建模

QQ:799568144 邮箱:799568144@qq.com 架构师 岗位职责: 1、 负责业务系统和基础设施的架构设计; 2、 解决项目中关键问题和技术难点; 3、 对项目团队进行技术指导和培训; 4、 对其它系统...

找工作的看过来
2011/08/19
930
5
DITA 技术分析报告,面向主题的文档交付解决方案

达尔文信息分类体系架构DITA是面向主题的文档交付解决方案,DITA基于XML表示并继承XML的文档描述元素,覆盖内容信息组织、编写、生成和交付的整个出版过程,并可以面向不同领域的技术出版物进...

鉴客
2010/09/07
760
0
一文了解物联网主控芯片架构之争

文/Boone 来源:中关村在线,智慧产品圈等 中兴事件引起了全球的轰动,大家的目光聚集在服务器、计算机、存储底层芯片技术缺乏之上。紫光等国产芯片供应商股票应声上涨。 此次事件反应出了我...

人工智能学家
2018/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
40分钟前
3
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
40分钟前
3
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
44分钟前
10
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
47分钟前
1
0
微服务设计 笔记

微服务设计 一、微服务架构理论 1.六边形架构 1)六边形架构(Hexagonal Architecture),又称为端口和适配器架构风格;使用适配器与外界进行交互,外界通过应用层API与内部进行交互。 2)经典...

啃不动地大坚果
55分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部