(1) 基于领域分析设计的架构规范 - 改变与优势
本系列目录:
- 改变与优势
- 领域分析基础
- 读写隔离
- 充血模型之实体
- 充血模型之Service
- 关于重构与落地
前言
大家好,我是一名普普通通的后端研发。
领域驱动设计(Domain Driven Design,DDD)是我大学开始就接触的概念,但一直到工作这么久了,却一直感觉像是雾里看花,仿佛懂了,却一直找不到说服自己用它的理由。
一年前,我又一次开始重新审视这个概念。终于,这一次,我结合实际项目场景和DDD的理念后,分析出一个以DDD为基础的编码规范。它不是一个很具象的技术组件,而更侧重于领域的分析,代码结构的编排等。
作为第一篇文章,我直接见山,介绍它在开发中的改变以及所带来的优势。
开发中的改变
- 读写隔离:查询操作与命令操作(增删改)通过文件(如Java的class)进行强制隔离
- 充血模型:实体类中允许出现行为操作,如
order.cancel()
带来的优势
读写隔离
- 对查询来说,采用
ReadOnly=true
,从代码规范上“强制”保证查询的纯净性与无害性 - 系统真正的流程变动都在命令,所以保证业务流程的聚焦,不受到查询的干扰
- 查询【重性能-轻事务】,修改则反之,不同的模块隔离,更便于框架进行统一优化,比如代码复用性,AOP优化,安全权限等等
- 如果为了性能考虑,要进行物理持久化层面的读写分离,也很方便
充血模型
- 明确领域责任划分,实体更具有实际意义,更符合面向对象的设计理念;
- 在长事务,复杂处理的过程中,可读性更强;
欢迎拍砖
这个规范,仅仅是参考DDD的部分思路,并非完全照搬DDD,因为领域分析里有太多太多概念,而且由于是一种非常抽象的分析模式,无法量化,更难形成标准。所以,我在这里只是吸取了其中一部分思路,然后以充血模型为基础,并给出一些可以量化的标准,来让团队更容易将这个规范落地。
所以,某成程度来说,它或许已经不是DDD的范畴了。
总之:
- 我写下本系列的几篇小文,算不上什么高深的技术文章,更多的是一个探讨与尝试,因为我个人真的挺喜欢这种分析和编码方式,所以想分享给大家;
- 而正式由于DDD的思维方式和编码方式和常规做法的差距较大,很容易让大家无法短时间适应,但我恰恰就想通过这个过程,了解大家的反馈和质疑,因为我也想知道,这个东西,真正落地,还有哪些困难;
- 所以,欢迎大家,文明拍砖,哈哈,如果有问题,能够给出具体的实际例子进行讨论更好。
感谢! 从下一篇开始进入正题:领域分析基础
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分布式主动感知在智能运维中的实践|分享实录
导读:企业数字化使得运维智能化转型成为必然,宜信积极推动 AIOps 在科技金融企业的落地实践。本次主题是探索 AIOps 落地的一种形式:通过行为采集、仿真模拟、主动感知等手段,从用户侧真实系统使用体验出发,结合全维监控数据,更加有效的实现智能异常检测和根因分析。 一、运维的发展 1.1 运维的价值 早期的运维工作比较简单,一般是先由系统集成工程师及研发工程师研发完项目后交付出来,再由负责运维工作的人员从后台做一些操作,保证系统正常运行。 图1 随着软件研发行业和技术的发展,运维的工作也变得越来越丰富。现阶段运维的工作与价值主要集中在三个方面: 1)效率 大量业务上线,运维人员需要保障快速高效地为系统提供资源、应对业务变更、响应操作请求。 2)质量 运维的目标是保障质量及系统的稳定性。也就是说,要保障业务和系统7*24小时在线上稳定运行,为用户提供流畅舒适的体验。为实现这个目标,运维的相关工作包括: 故障预测:没出现问题之前预测到故障发生的可能。 异常检测:出现问题时很快检测并定位到异常点。 根因分析:分析问题的诱因,找出真正导致问题的根本原因。 动态扩容:问题处理的过程中可能受到复...
- 下一篇
(2) 基于领域分析设计的架构规范-领域分析基础
本系列目录: 改变与优势 领域分析基础 读写隔离 充血模型之实体 充血模型之Service 关于重构与落地 由于整个架构规范很大程度上是基于领域驱动设计(Domain Driven Design,DDD)的思维,所以,有必要在这里和大家先介绍一下DDD的一些概念。 领域聚合 让我们用一个相对简单的小电商系统来举例,来说明几个概念,这个电商系统的大概需求如下 我们主营的商品是甜品,计划让用户能过通过微信小程序来完成下单到支付的整个流程 用户能够在我们的小程序主页选择甜品主食,然后选择详细的一些辅料搭配,最终下单,(为了简化,暂不考虑购物车,也就是一单只有一个甜品) 目前只允许堂食,不考虑配送 对了,我们偶尔还会需要派发一些优惠券,用户能在支付的时候输入优惠券进行抵扣(一次最多用一张) 我们想能够记录好每个用户从下单,支付,到制作完成的整个流程记录 然后,我们能够很快得出这样一个模型图 简单来说就是: 一个用户可以创建多个订单,当然也可以不下单 一个订单会产生至少一条订单变更记录(从创建开始) 一个订单只对应一种商品,假定商品的“辅料搭配”只作为一个“备注”属性存储到商品 一个订单最多使用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16