重新解读DDD领域驱动设计(一)

2023-05-16

回顾

十年前,还未踏入某校时,便听闻某学长一毕业就入职北京某公司,月薪过万。对于一个名不见经传的小学院,一毕业能拿到这个薪水还是非常厉害的。听闻他学生期间参与开发了一款股票软件,股票那时正迎来一波疯涨。时也运也。我那时心里就想,只会软件也行不通吧,至少要熟悉股票规则。在还未踏入编程大门时,我就清楚的认识了软件服务于业务的本质。

      等刚开始工作时,从事些较简单的工作,也是需要和使用人员讨论需求,文档编写和开发实现。性质偏向于公司内部财务人员或业务人员管理用的子系统。也许厌烦了写的代码用的人太少,于是转移到了互联网类型的公司。在日益复杂的业务与软件规模下,以前用的熟练的三板斧渐渐适应不了,知识库需要更新了。结合以前的工作实践,按自己的理解,重新解读下领域驱动设计。

第一部分  运用领域模型

按照一个系统的开发步骤,除了前期招标,合同,预算,人员规划等其他项目管理的范畴外,真正执行到系统部分是从沟通业务需求开始的。

第一章 消化知识

几年前我们要做一个院系资产管理系统,最开始理解的有人申请,管理员审核购买,分发扣库存的逻辑。实际讨论下来之后,分为很多流程。如设备提申请,教务处审批,院系审批,提交财务核账。又涉及到固定资产折旧,退货流程,又要财务核对。又有家具的申请与退货等其他。还有定期的报表功能。基于我们开发人员和校方人员,都对资产审核,退货,对账流程都有一定熟悉度,所以沟通下来业务大框架还算顺利。我理解为我们在沟通业务的过程中,有了相似的认识,并在磨合过程中,修炼完善。DDD一书中,以PCB电路板软件工具为开篇,讲述了PCB专家和开发人员沟通中从最开始的很难沟通,到最后依据流程图及PCB元件执行逻辑完成了语言上的沟通统一。很幸运,我们大部分的业务并没有如文中跨度那么大。

在沟通的过程中,业务专家需要理解共同构建的业务模型,开发人员也要依据业务模型来勾思大概实现逻辑。就比如设备申请,家具申请,XX申请;设备退货,资产退货。这些有共同性,又有差异的流程,如何更好的抽象,来实现复用?如果单纯开发人员自己抽象得到概念有可能是很幼稚的,开发出来的软件只能做基本工作,无法充分反映领域专家的思考方式。

领域专家和开发人员共同参与,一起来丰富抽象的模型。提炼模型,对于领域专家来说也是升华自己思考完善自己理解的过程。会更加注重概念的严谨性。

模型在不断改进的同时,也称为组织项目信息的工具。模型聚焦于需求分析。它与编程和设计紧密交互。

知识丰富的设计

举一个判断是否合并账号的逻辑。一个请求中的手机,邮箱账号,根据账号的是否验证,以及数据库中手机号邮箱的是否存在是否验证来判断是否合并账号。产品列举了81条合并规则。

我最开始想到了策略设计模式。根据各种状态分析出主要的几个策略来实现判断。工作量相当复杂,而且易出错。同事建议了另外一种规则式的实践。对比新账号的状态和筛选中的存在账号状态,形成一个规则,看这个规则符合那81条规则的哪一种。这样代码量指数级下降,也通用。而且其他人也更容易根据产品的文档,直接看懂代码。模型与实现一致。

书中依据航线超卖为例,举了两个例子,一个是简单的if超卖判断,一个把超卖独立成一个策略类来判断超卖。并强调超卖在模型中不仅仅是一个简单的判断,而是一个让所有人看到代码都明白是一个独特的策略。

经过以上对比,你会发现设计模式有它自己的适用场景,不要随便套用。第二点设计的模型和代码实现一致。

深层模型

说到太极,外是软绵绵的一套动作。如果按软件直接开发,实现出来的是错的。因为陈家沟的领域专家们会告诉你太极每一招都是制人招。这个我信,如果有人喂招的话,分秒钟被干到地,对付普通人还是有效的。

这里说的后续的制人招是深层模型,我们看到的慢腾腾的动作是表层。这样说很容易理解。

第二章 交流与语言的使用

通用语言

领域专家和开发人员语言要一致。将模型作为语言的支柱。确保团队在内部的所有交流中以及代码中坚持使用这种语言。

书面设计文档

文档应作为代码和口头交流的补充

文档和图

用图来沟通交流,能促进头脑风暴。但模型不是图。            

本篇文章主要是应用自己亲身经历的案例来重新解读领域驱动。

本篇结束,谢谢观看。

作者:从此启程/范存威

出处:http://www.cnblogs.com/fancunwei/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如文章对您有用,烦请点个推荐再走,感谢! 本博客新开通打赏,鼠标移到右侧打赏浮动处,即可赏博主点零花钱,感谢您的支持!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新解读DDD领域驱动设计(一) 的相关文章

  • DDD中的模式

    一 背景 在学DDD的时候我首先看的是 领域驱动设计 软件核心复杂性应对之道 xff0c 这本书里记录了很多概念 xff0c 方法 xff0c 思想 xff0c 策略 xff0c 模式等 整体读下来非常费劲但是收获也不小 xff0c 如何转
  • 【DDD】持久化领域对象的方法实践

    概述 在实践领域驱动设计 xff08 DDD xff09 的过程中 xff0c 我们会根据项目的所在领域以及需求情况捕获出一定数量的领域对象 设计得足够好的领域对象便于我们更加透彻的理解业务 xff0c 方便系统后期的扩展和维护 xff0c
  • 在UBUNTU18.04中安装DDD调试器调试内核时启动调试器的警告解决方法

    在UBUNTU18 04中安装DDD调试器调试内核时启动调试器的警告解决方法 xff1a Warning Cannot convert string 34 helvetica medium r 120 iso8859 34 to type
  • DDD开发

    内容来自某PPT 文章目录 DDD开发1 领域 限定上下文 实体 值对象1 1 领域 子域1 2 核心域 通用域 支撑域1 3 通用语言1 4 限界上下文 xff1a 定义领域边界的利器1 5 实体1 6 值对象1 7 实体 VS 值对象
  • 【转载】DDD中的 CQRS模式

    转载自 xff1a DDD 中的那些模式 CQRS 知乎 DDD 作为一种系统分析的方法论 xff0c 最大的问题是如何在项目中实践 而在实践过程中必然会面临许多的问题 xff0c 模式 是系统架构领域中一种常见的手段 xff0c 能够帮助
  • 重新解读DDD领域驱动设计(一)

    回顾 十年前 xff0c 还未踏入某校时 xff0c 便听闻某学长一毕业就入职北京某公司 xff0c 月薪过万 对于一个名不见经传的小学院 xff0c 一毕业能拿到这个薪水还是非常厉害的 听闻他学生期间参与开发了一款股票软件 xff0c 股
  • 2.5万字讲解DDD领域驱动设计,从理论到实践掌握DDD分层架构设计,赶紧收藏起来吧

    推荐好文 2 5万字详解23种设计模式 微服务springcloud环境下基于Netty搭建websocket集群实现服务器消息推送 netty是yyds 代码中如何干掉太多的if else即if else的多种替代方案以提高代码质量通过公
  • 有了这两本书,学习领域驱动设计会很容易

    自2003年Eric Evans的著作 领域驱动设计 面世以来 领域驱动设计 DDD 相关的实践书籍并不多 整体的理论发展速度并不快 以至于很长一段时间 开发团队的实践过程总是磕磕绊绊 这让他们觉得领域驱动设计的门槛很高 甚至有人怀疑领域驱
  • 领域驱动设计:DDD 关键概念

    文章目录 领域和子域 核心域 通用域和支撑域 通用语言 限界上下文 实体 值对象 聚合 聚合根 设计聚合 DDD 的知识体系提出了很多的名词 像 领域 子域 核心域 通用域 支撑域 限界上下文 聚合 聚合根 实体 值对象等等 非常多 领域和
  • [答疑]同事认为应该先画序列图,强烈反对先画类图

    DDD领域驱动设计批评文集 软件方法建模师 不再考查基础题 软件方法 各章合集 匿 2023 8 28 17 19 团队分享会 我和同事分享了学习软件方法下的心得 我说根据需求规格说明书画出类图 再画时序图添加类的方法 有一个高开就说应该先
  • DDD领域驱动篇——第一章(一文带你领略DDD、微服务和中台设计)

    在讲DDD之前 我对领域驱动曾经有过一段时间的了解 其实这个概念当我第一次听的时候发现很泛化 而且很抽象甚至难以理解 后来我发现这个玩意得需要很多时间 很多框架 技术的演进 软件迭代到了一定的瓶颈 业务愈发复杂而带来一系列架构转变和业务重构
  • 领域驱动设计DDD

    什么是领域驱动设计 DDD 领域驱动设计 Domain Driven Design 简称 DDD 是一种软件开发方法论 旨在解决复杂业务领域的建模和实现问题 DDD 强调将业务领域作为软件设计和开发的核心 通过深入理解业务领域的知识 将其反
  • 领域驱动设计:领域事件

    文章目录 领域事件 识别领域事件 领域事件相关案例 领域事件总体架构 领域事件 领域事件是领域模型中非常重要的一部分 用来表示领域中发生的事件 一个领域事件将导致进一步的业务操作 在实现业务解耦的同时 还有助于形成完整的业务闭环 举例来说的
  • 领域驱动设计-Domain-Driven-Design概念

    2021了 你应该要了解DDD了 不然领导和你吹牛你都听不懂 或者你都没法和别人吹牛了 一 Evans DDD 是什么 1 1 背景 2002年 敏捷宣言诞生 时代处于 CS 到 BS 的转换时期 2003年 Eric Evans 发表 l
  • 第8章 应用程序架构

    第8章 应用程序架构 之前 介绍了让团队可以对问题域的有用概念抽象建模的技术 不过 这一章将介绍可以在应用程序上下文中利用领域模型的模式 其中考虑到了持久化 展现以及其他技术需求 应用程序架构 遵循DDD原则开发软件不需要使用任何特殊的应用
  • DDD-笔记

    先说下传统系统设计 大部分从数据库开始 自底向上的设计 这种设计会使系统的设计受到数据库的影响 会有比较大的局限性 比如说 数据库仅有数据 没有行为 而对现实世界的描述则会更加抽象 更加远离业务 开发团队通过与产品或客户的沟通 直接设计表模
  • 领域驱动设计:DDD重构中台业务模型

    文章目录 如何避免重复造轮子 如何构建中台业务模型 如何避免重复造轮子 要避免重复建设 就要理解中台的理念和思想 中台是企业级能力复用平台 复用 用白话说就是重复使用 就是要避免重复造轮子的事情 中台的设计思想与 高内聚 低耦合 的设计原则
  • 领域驱动设计:DDD分层架构

    文章目录 DDD 分层架构 DDD 分层架构最重要的原则 DDD 分层架构推动架构演进 三层架构如何演进到 DDD 分层架构 微服务架构模型有好多种 例如整洁架构 CQRS 和六边形架构等等 每种架构模式虽然提出的时代和背景不同 但其核心理
  • 在小项目中实践领域驱动设计(含详细代码和实践过程) #CSDN博文精选# #IT# #项目实践#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同 并没有统一的 标准的DDD工程架构 有些团队可能遵循经典的DDD四层架构 或改进的DDD四层架构 有些团队可能综合考虑分层架构 整洁架构 六边形架构等多种架构风

随机推荐

  • Flask 环境搭建

    引用自 xff1a https www cnblogs com rongtangzi p 6623122 html bin env python coding utf 8 describe this script shoud install
  • 转:vc中如何通过http的post方式上传文件

    文章引自 xff1a http blog myspace cn e 404248359 htm vc中如何通过http的post方式上传文件 HTTP响应 在接收和解释请求消息后 xff0c 服务器会返回一个HTTP响应消息 与HTTP请求
  • 奇偶校验

    奇偶校验有两种校验规则 xff1a 奇校验 xff1a 使完整编码 xff08 有效位和校验位 xff09 中的 34 1 34 的个数为奇数个 xff1b 偶校验 xff1a 使完整编码 xff08 有效位和校验位 xff09 中的 34
  • C++自定义file头文件

    2019独角兽企业重金招聘Python工程师标准 gt gt gt code ifndef SEAL FILEPOOL H define SEAL FILEPOOL H include 34 error h 34 include 34 ha
  • 锂电池主动均衡理解

    锂电池主动均衡方案总结 xff1a 来自 xff1a http wenku baidu com link url 61 EWiyACZ3aLPhcOjI4FZL3uQ9d0FD6dBhADQSVQiaSmRHHATTdSig1Wy39JY7
  • v$process.SPID 及 v$session.PROCESS的含义

    v session PROCESS Operating system client process ID Client side 是连接数据库的客户端程序的进程号 如果是WINDOWS client连接数据库 xff0c 则格式稍有不同 x
  • [Unity3D]矢量数学:向量的点乘(内积)和叉乘(外积)

    Unity使用左手坐标系 xff1a 拇指X轴 xff0c 食指Y轴 xff0c 中指Z轴 计算公式 xff1a 设 A Ax xff0c Ay xff0c Az B Bx xff0c By xff0c Bz xff0c 则 1 向量的模
  • itext 用的pom插件

    lt dependency gt lt groupId gt com itextpdf lt groupId gt lt artifactId gt itext asian lt artifactId gt lt version gt 5
  • Rplidar学习(三)—— ROS下进行rplidar调试

    一 建立工作空间 编译包 mkdir p catkin rplidar src 创建目录 cd catkin rplidar src 打开目录 下载rplidar ros数据包 xff0c 进行移动 git clone https gith
  • 数据包嗅探工具:HTTP请求/响应分析工具

    HTTPNetworkSniffer
  • RoboMaster 2017:机器人版的「王者农药」,工程师们的竞技时代

    8月6日晚 xff0c 第十六届全国大学生机器人大赛 RoboMaster 2017机甲大师赛在华润深圳湾体育中心 春茧 体育馆举行 xff0c 关于这个比赛的盛况已经无需赘述 xff0c 去年雷锋网参加上届比赛时 xff0c 报道的是 像
  • python popen.stdout.read阻塞 解决办法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 需求 xff1a 利用python的subprocess模块结合logging模块实现监控子程序运行情况 代码如下 程序阻塞在stdout readz这里 xff0c 日志
  • Windows云服务器CPU使用率高的问题一例

    作者 xff1a 声东 大家好 xff0c 今天跟大家分享一例Windows云服务器CPU使用率高的问题 问题症状 客户购买了一台Windows 2016云服务器 xff0c 登录之后发现这台服务器的CPU使用率一直保持在90 以上 问题分
  • java 类知识_Java类基础知识

    同时按住Java中的Alt键和 39 39 键 xff0c Eclipse会给你代码提示 java 的几个基本概念 1 JVM java 虚拟机 运行java 程序的根本 2 JRE java 运行环境 xff0c java 虚拟机 43
  • UDP程序设计

    UDP套接口是无连接的 不可靠的数据报协议 xff1b 既然他不可靠为什么还要用呢 xff1f 其一 xff1a 当应用程序使用广播或多播时只能使用UDP协议 xff1b 其二 xff1a 由于他是无连接的 xff0c 所以速度快 因为UD
  • Linux下读写芯片的I2C寄存器

    要想在Linux下读写芯片的I2C寄存器 xff0c 一般需要在Linux编写一份该芯片的I2C驱动 xff0c 关于Linux下如何编写I2C驱动 xff0c 前一篇文章 手把手教你写Linux I2C设备驱动 已经做了初步的介绍 xff
  • linux centos 7上运行teamviewer与找不到ID问题处理办法

    以前在raspberryPi上搞过teamviewer xff0c 现在用了CentOS服务器 xff0c 搞了一个vpn xff0c 访问还有点问题 xff0c 时间紧张 xff0c 就先给teamviewer 而centos7 上安装也
  • 如何传集合型参数

    想传入查询参数到存储过程中 xff0c 但参数代表一个集合 不知该如何实现 首先是参数用什么类型 xff1f 然后是在PL SQL中查询语句的条件该如何写 xff1f 期望的SQL查询是类似这样的 xff1a select from aaa
  • Vue SSR Nuxt axios封装

    安装 npm install axios save span class copy code btn 复制代码 span 使用 nuxt config js 引入插件 xff0c 启动中间件 plugins span class hljs
  • 重新解读DDD领域驱动设计(一)

    回顾 十年前 xff0c 还未踏入某校时 xff0c 便听闻某学长一毕业就入职北京某公司 xff0c 月薪过万 对于一个名不见经传的小学院 xff0c 一毕业能拿到这个薪水还是非常厉害的 听闻他学生期间参与开发了一款股票软件 xff0c 股