领域驱动设计(一) - 理论基础

news/2024/4/26 11:50:32/文章来源:https://blog.csdn.net/liudonglovehemin/article/details/131526930

DDD这些概念已经火了很长时间,截至目前也是热度不减。各个公司也都有相应的落地实践,尤其是在中台建设时。笔者接触DDD比较早,无奈由于当时的认知和能力问题一直没太弄明白如何落地,后来也就没在关注了。直到公司几年前制定了中台战略,笔者有幸参与了从0到1的整个过程。过程中公司也给了足够的试错空间,非常幸运的有了足够的环境和时间从理论知识、方法论到落地实践方方面面都实践了一遍。

笔者之前总结过一份5W多字的笔记,但由于时间比较仓促,多数内容是记录给自己看的,正好最近有些时间,开一个此系列的文章,分享下笔者这些年DDD理论落地的经验,希望能与您共鸣。此系列预计包含6大章、35小节讲述DDD在中台建设的实践。

        首先笔者先阐明一个观点,中台或是DDD需要适合的土壤和人群,尤其面对研发同学笔者不建议初中级研发同学去研究这方面的理论知识,这里没有褒贬的意思,只是很容易陷入一学就会,一用就废的处境,如果形成了错误的知识体系就百害而无一利了。

        另外这个领域并不是写在PPT上的文字,需要静下心来踏实的一步一步脚印走,同时也需要一定的外部环境支持,比如好的研发文化、足够复杂的系统、足够多的业务种类也能最大化发挥其优势进而起到提效和降本的作用如果有读者现在也在进行此方式的研发工作,建议不时的复盘下,最根本的要回答出以下两个问题:

  • 所谓的中台,现在是在做能力还是在做功能?
  • 中台建设的短期和中长期的目标是否足够清晰?
  • 研发流程有了哪些改进,研发效能是否有所提升?

        以上几个问题是笔者在实践过程中踩过的坑,曾经一度认为这东西就是形势主义,劳民伤财。其实不然,与其系统技术方面的改变来说,认知和思维的改变可能更能决定其成功与否。

概述

        软件设计的核心之一是架构设计,评判架构的优略最重要的标准是其与所支撑业务的匹配程度和适度的扩展性。流行的一句话:”没有业务的架构设计全是耍流氓“,实话,但也悲壮的让人心疼。

        比架构设计更核心的应该是业务模型的设计,实际上任何一本关于软件设计的书中都会提及”技术+业务”,这四个字或许也是每个软件人职业生涯中一直追求的目标。然而反观我们的很多系统,技术对业务的表述往往局限在了一张优美的架构图上,而真正能反映业务的模型很多时候却被一个个事务脚本所代替。这种设计无所谓好还是坏,从支撑业务稳定运行的角度来讲是合格的。但从业务发展的角度来讲,上述软件架构的适应能力是有待商榷的。

        从各种报道和权威统计数据上可以看出,现阶段互联网行业的多数业务都或多或少面临市场饱和、流量红利消失、资本投入的减少、获客成本的提高等不利因素,打破这一局面需要划时代的创新,然而真正意义上的创新本质上需要以大的技术变革推动,没有新技术的介入往往需要稳固市场或开展新业务模式。这个背景下的新业务基本上的是基于原有成熟业务模式进行删减和增加个性化场景进而孵化出来的,新业务不会经过技术、甚至是产品阶段就会直接被市场验证。所以快速实现、快速试错在一定程度上成了这阶段业务创新的重要需求。

        快速的业务试错和越来越多的个性化需求对于软件系统的设计要求是非常高的,如果现有系统的模型能很好的表述业务,即使谈不上加速至少不会成为创新瓶颈。但是对于”大泥球”般的复杂软件系统尤其是稳定的已经对接了很多线上业务的核心系统的冲击可能是毁灭性的。改造这种”大泥球”般的系统使其能很好的表述业务并不是一件容易的事,需要一套科学的指导方法和与之配套的落地方案,这就是本文档中提及的解决方案DDD领域驱动设计(Domain-Driven Design)。

        DDD并不是什么新的知识,早在几十年前就已经提出了,其核心思想是围绕真实业务场景构建领域模型进而解决复杂系统开发。幸运的是DDD除提供了一套完整的设计方法外,还分别从组织架构、技术架构、工程管理、代码落地等方面分别给出了指导方法和实践指南。

        DDD分为战略和战术两方面:战略主要讲述的是站在组织的视角定位业务以及应用间集成所采用的策略(非公司级的经营战略);战术是战略的代码映射,详细包括模型的分析、构建、整合优化等。

DDD之于我

        100个读者心中有100个哈姆雷特,这是在实践DDD以后的直观感受。DDD的受益人群比较广,甚至软件开发全周期中的所有角色都可以从中得到指导。基于此刻笔者对DDD的认知,它确实可以解决一些日常工作中遇到的问题:

  • 全局的业务视图,降低认知负担,拉齐业产研多方对业务的理解,统一顶层设计;
  • 统一通用语言,提高沟通效率,加速知识的沉淀,可用于需求的沟通和模型的定义;
  • 限界上下文,系统间解耦的重要依据之一。同时综合组织架构等因素,采取不同的集成策略,减少由于组织的调整带来的冲击;
  • 与业务一致的模型设计和代码映射,规范编码的同时也可缩短新员工的上手周期;

本文档中,笔者尽量不用加粗或颜色区分重点与不重点内容,撰写此文档时,每一段文字都经过了多次修改,虽然笔者的文笔和当前的认知有限有些内容的理解和表述一定会不尽人意。如果笔者的经验能避免您在实践DDD不掉进同样的坑中,笔者甚是欣慰;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_325634.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis多参数传递报错问题分析+硬核mybatis底层源码分析+@Param注解+图文实战环境分析【4500字详解打通,没有比这更详细的了!】

文章目录 1.问题描述2.问题场景模拟再现2.1 场景环境2.2 数据库与表创建2.3 Maven环境搭建🍀 pom.xml导入依赖🍀 jdbc.properties🍀 mybatis-config.xml🍀 User实体类🍀 Mapper 接口🍀 UserMapper.xml 映射…

IT-OT 安全融合是优化风险管理的关键

最新报告揭示了运营技术检测和响应方面的显着可见性差距。 全球网络安全运营商趋势科技宣布了一项新研究,显示企业安全运营中心 (SOC) 正在将其能力扩展到 OT 领域。 然而,重大的可见性和技能相关的挑战仍然造成障碍。 研究发现,一半的组织…

决策树ID3

文章目录 题目一基础知识解题过程①算总的信息量②求解各个指标的信息增益,以此比较得出根节点③ 从根节点下的晴天节点出发循环上述步骤④ 从根节点下的多云节点出发,循环上述步骤⑤ 从根节点下的雨节点出发,循环上述步骤⑥画出最终的决策树…

4.设计模式之后七种模式后11种模式命令访问者迭代器发布订阅中介者忘备录解释器状态策略职责链和空模式

1.命令(command)模式 不知道命令接收者(对象)是谁,支持撤销 (接受者 间接调用执行 的具体行为) 命令调用者和接收者解耦 //只要实现命令接口即可 (就是客户端给个命令,然后命令类传给接收类执行) 优点和缺点 容易撤销操作 命令队列可以多线程操作 增加过多的命令类 空命令也是一…

揭秘元宇宙背后的最炫科技风

:元宇宙,这个词汇在近年来越来越被人们所熟知。它是一个虚拟的世界,由数字化的现实世界和虚拟现实技术所构成。在元宇宙中,人们可以自由地探索、交互、创造和享受各种虚拟体验。而这一切,都离不开最炫科技风的支持。 …

道路车辆功能安全第2 部分:功能安全管理

道路车辆功能安全 第2 部分:功能安全管理 1 范围 GB/T 34590的本部分规定了应用于汽车领域的功能安全管理的要求,包括: ——独立于项目的关于所涉及组织的要求(整体安全管理);及 ——项目特定的在安全生命周…

Docker常见问题集合

一、Docker安装 1、yum 安装 1)更新yum包到最新 yum update2)安装软件需要的软件,yum-util(提供 yum-config-manager 功能),device-mapper-persistent-data、lvm2(devicemapper 驱动依赖&…

【Linux】Redis 集群部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Redis 集群部署 Redis 主从复制主从复制的作用主从复制的流程搭建Redis 主从复制安装 Redis修改 Redis 配置文件(Master节点操作)修改 Redis 配置文件…

STM32——建工程

文章目录 一、建工程步骤1. 创建一个工程文件2. 里面创建四个文件3. Lib:存放标准库的.c和.h文件,其中inc放置.h文件,src放置.c文件4. Startup中存放驱动文件5.User文件中包含以下路径以下文件6.创建工程Project 一、建工程步骤 以STM32F10X…

百万连接实现01:使用epoll+多线程+多IP地址管理tcp客户端集群

操作系统采用 <客户端IP : 客户端端口> : <服务端IP : 服务端端口> 四元组来标识一条TCP连接。 所以要想实现百万连接&#xff1a; 第一种是服务器端只开启一个进程&#xff0c;然后使用很多个客户端进程绑定不同的客户端 ip 来连接&#xff0c;假设 20个ip * 5w&a…

AIGC - Easy Diffusion (Stable Diffusion) 图像生成工具的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/131524075 版本v2.5.41 Stable Diffusion 图像生成工具是一种基于深度学习的技术&#xff0c;可以从随机噪声中生成高质量的图像&#x…

计模式篇(Java):桥接模式

上一篇&#xff1a;计模式篇(Java)&#xff1a;适配器模式 九、桥接模式 需求示例 当我们对不同手机类型的不同品牌实现操作编程&#xff0c;如图&#xff1a; 那么它对应的类图就是 传统方式解决需求分析&#xff1a; 扩展性问题&#xff0c;如果需要在增加手机的样式&#x…

自学网络安全究竟该从何学起?

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入行…

MATLAB | 拉普拉斯分布/拉普拉斯噪声的生成

一、实验目标 生成拉普拉斯分布的噪声&#xff0c;并分析它的概率密度函数 二、解决思路 &#xff08;1&#xff09;拉普拉斯分布可以由指数分布生成 拉普拉斯的概率密度函数为 f ( x ; μ , λ ) 1 2 λ e − ∣ x − μ ∣ λ f(x;\mu,\lambda)\frac{1}{2 \lambda} e^{…

简单的手机记事本怎么把英文翻译成中文?

手机记事本是人们常用的辅助工具之一&#xff0c;在使用手机记事本记录内容的时候&#xff0c;除了我们平时使用较多的中文之外&#xff0c;也有人会记录一些英文内容。想要将手机记事本中的英文内容翻译成中文内容应该如何操作呢&#xff1f;以iPhone手机端敬业签记事本软件为…

GIS杂记(二):Arcgis对采样点进行裁剪,获取指定区域内的采样点

有时候需要对栅格数据进行采样处理&#xff0c;如果采样点过多则会使得采样时间过长&#xff0c;今天在进行数据采样时&#xff0c;使用了1km*1km的渔网建立的采样点&#xff0c;大概有1百万个点&#xff0c;程序运行时间大概4个小时&#xff0c;但是其中有绝大部分数据都是空值…

Css 基础:选择器,三大特性

1.emmet的 快速格式化代码 配置 "editor.formatOnType": true, "editor.formatOnSave": true 2.基础选择器 3.复合选择器 4.单行文本垂直居中原理 5.css背景 6.CSS三大特性 层叠性&#xff1a;相同选择器设置相同样式&#xff0c;发生在样式冲突时&#xf…

【PC】CPU与GPU

文章目录 CPU与主板CPU是什么主板是什么功能 GPU与显卡GPU是什么显卡是什么功能 CPU与GPU的关系 ALU&#xff1a; 算术单元&#xff08;Arithmetic Unit&#xff09;&#xff1a;算术单元执行基本的算术运算&#xff0c;如加法、减法、乘法和除法。它能够对整数、浮点数和定点数…

Web服务器群集:LVS+Keepalived高可用群集

目录 一、理论 1.Keepalived 2.VRRP协议&#xff08;虚拟路由冗余协议&#xff09; 3.部署LVSKeepalived 高可用群集 二、实验 1.LVSKeepalived 高可用群集 三、问题 1.备服务器网卡启动报错 四、总结 一、理论 1.Keepalived &#xff08;1&#xff09;简介 Keepal…

Redis高可用群集---搭建(主从、哨兵、Cluster)

目录 Redis 高可用集群Redis 主从复制Redis 哨兵模式Redis 集群模式 Redis 高可用集群 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redi…