有了这两本书,学习领域驱动设计会很容易

2023-10-27

自2003年Eric Evans的著作《领域驱动设计》面世以来, 领域驱动设计(DDD) 相关的实践书籍并不多,整体的理论发展速度并不快,以至于很长一段时间,开发团队的实践过程总是磕磕绊绊, 这让他们觉得领域驱动设计的门槛很高,甚至有人怀疑领域驱动设计是否是一种足够成熟与体系化的方法论。

学习领域驱动设计有这两本书,一切将不再是

1、解构领域驱动设计

有了这两本书,学习领域驱动设计不再难


所谓“解构”,就是解析与重构:

  • 解析,就是要做到知其然更知其所以然;
  • 重构,则要做到青出于蓝而胜于蓝。

本书不再满足于粗略地将内容划分为战略篇和战术篇, 而是在领域驱动设计统一过程的指导下, 将该过程的3个阶段——全局 分析、架构映射和领域建模作为本书的3个核心篇,再辅以开篇和融合,共分为5篇(20章)和4个 附录,全面而完整地表达了我对领域驱动设计的全部认知与最佳实践。在对内容做进一步精简后, 本书仍然接近600页,算得上是软件技术类别的大部头了。
该如何阅读这样一本厚书呢?

若你时间足够充裕,又渴望彻底探索领域驱动设计的全貌, 我建议还是按部就班、循序渐进 地进行阅读。或许在阅读开篇的3章时,你会因为太多信息的一次性涌入而产生迷惑、困扰和不解, 这只是因为我期望率先为读者呈现领域驱动设计的整体面貌。在获得领域驱动设计的全貌之后,哪 怕你只是在脑海中存留了一个朦胧的轮廓,也足以开启自己对设计细节的理解和认识。

若你追求高效阅读,又渴望寻求领域驱动设计问题的答案,可以根据目录精准定位你最为关心的技术讲解。或许你会失望,甚至产生质疑,从目录中你获得了太多全新的概念, 而这些概念从未见于任何一本领域驱动设计的图书,这是因为这些概念都是作者针对领域驱动设计提出的改进与补充, 是作者解构全新领域驱动设计知识体系的得意之笔——要不然,一本技术图书怎么会写三年之久呢?

作者将自鸣得意的开创性概念一一罗列于此。

业务服务。业务服务是全局分析的基本业务单元,在统一语言的指导下完成对业务需求的 抽象,既可帮助我们识别限界上下文,又可帮助开发团队开展领域分析建模、领域设计建 模和领域实现建模。业务服务的粒度也是服务契约的粒度,由此拉近了需求分析与软件设 计的距离,甚至可以说跨越了需求分析与软件设计的鸿沟。

菱形对称架构。虽然菱形对称架构脱胎于六边形架构与整洁架构,但它更为简洁, 与限界 上下文的搭配可谓珠联璧合,既保证了限界上下文作为基本架构单元的自治性,又融入了 上下文映射的通信模式,极大地丰富了设计要素的角色构造型。

服务驱动设计。服务驱动设计采用过程式的设计思维, 却又遵循面向对象的职责分配, 能 在提高设计质量的同时降低开发团队的设计门槛,完成从领域分析模型到领域实现模型的 无缝转换,并可作为测试驱动开发的前奏,让领域逻辑的实现变得更加稳健而高效。

以上概念皆为领域驱动设计统一过程的设计元素, 又都能与领域驱动设计的固有模式有机融 合。对软件复杂度成因的剖析,对价值需求和业务需求的划分,在领域驱动设计统一过程基础上建 立的能力评估模型与参考过程模型,

2、领域驱动设计 软件核心复杂性应对之道 修订版

有了这两本书,学习领域驱动设计不再难

本书终于实现了一个宏伟抱负,即描述并建立了领域建模艺术的词汇库。它提供了一个参考框架,人们可以用它来解释相关活动,并用它来传授这门难学的技艺。

你可以学到的两大经验

首先,在领域建模过程中不应将概念与实现割裂开来。高效的领域建模人员不仅应该能够在白板上与会计师进行讨论,而且还应该能与程序员一道编写Java代码。之所以要具备这些能力,一部分原因是如果不考虑实现问题就无法构建出有用的概念模型。但概念与实现密不可分的最主要原因在于,领域模型的最大价值是它提供了一种通用语言,这种语言是将领域专家和技术人员联系在一起的纽带。

我们将从本书中学到的另一个经验是领域模型并不是按照“先建模,后实现”这个次序来工作的。

复杂性的挑战

很多因素可能会导致项目偏离轨道,如官僚主义、目标不清、资源缺乏等。但真正决定软件复杂性的是设计方法。当复杂性失去控制时,开发人员就无法很好地理解软件,因此无法轻易、安全地更改和扩展它。而好的设计则可以为开发复杂特性创造更多机会。

一些设计因素是技术上的。软件的网络、数据库和其他技术方面的设计耗费了人们大量的精力。很多书籍都介绍过如何解决这些问题。大批开发人员很注意培养自己的技能,并紧跟每一次技术进步。

然而很多应用程序最主要的复杂性并不在技术上,而是来自领域本身、用户的活动或业务。当这种领域复杂性在设计中没有得到解决时,基础技术的构思再好也无济于事。成功的设计必须系统地考虑软件的这个核心方面。

本书有两个前提:

(1)在大多数软件项目中,主要的焦点应该是领域和领域逻辑;

(2)复杂的领域设计应该基于模型。

领域驱动设计是一种思维方式,也是一组优先任务,它旨在加速那些必须处理复杂领域的软件项目的开发。为了实现这个目标,本书给出了一整套完整的设计实践、技术和原则。

设计过程与开发过程

设计书就是讲设计,过程书只是讲过程。它们之间很少互相参考。设计和过程本身就是两个足够复杂的主题。本书是一本设计书,但我相信设计与过程这二者是密不可分的。设计思想必须被成功实现,否则它们就只是纸上谈兵。

当人们学习设计技术时,各种可能性令他们兴奋不已,然而真实项目的错综复杂又会为他们泼上一盆冷水。他们无法用所使用的技术来贯彻新的设计思想,或者不知道何时应该为了节省时间而放弃某个设计方面,何时又应该坚持不懈直至找到一个干净利落的解决方案。开发人员可以抽象地讨论设计原则的应用,而且他们也确实在进行着这样的讨论,但更自然的做法应该是讨论如何完成实际工作。因此,虽然本书是一本有关设计的书,但我会在必要的时候穿越这条人为设置的边界,进入过程的领域。这有助于将设计原则放到一个适当的语境下进行讨论。

虽然本书并不局限于某一种特定的方法,但主要还是面向“敏捷开发过程”这一新体系。特别地,本书假定项目必须遵循两个开发实践,要想应用书中所讲的方法,必须先了解这两个实践。

(1)迭代开发。人们倡导和实践迭代开发已经有几十年时间了,而且它是敏捷开发方法的基础。在敏捷开发和极限编程(XP)的文献中有很多关于迭代开发的精彩讨论,其中包括Surviving Object-Oriented Projects [Cockburn 1998] ①和Extreme Programming Explained [Beck 1999]。

(2)开发人员与领域专家具有密切的关系。领域驱动设计的实质就是消化吸收大量知识,最后产生一个反映深层次领域知识并聚焦于关键概念的模型。这是领域专家与开发人员的协作过程,领域专家精通领域知识,而开发人员知道如何构建软件。由于开发过程是迭代式的,因此这种协作必须贯穿整个项目的生命周期。

本书将设计和开发实践结合起来讨论,并阐述领域驱动设计与敏捷开发过程是如何互相增强的。在敏捷开发过程中使用成熟的领域建模方法可以加速开发。过程与领域开发之间的相互关系使得这种方法比任何“纯粹”真空式的设计更加实用。

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

有了这两本书,学习领域驱动设计会很容易 的相关文章

  • IDEA导入MySQL的jdbc驱动出现“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”

    目录 一 一般的解决思路 1 JDBC下载链接 2 选择下载内容 并进行下载 3 将驱动导入java项目 二 依然导入驱动失败怎么办 当我们在idea中使用java操作mysql数据库时会出现 Exception in thread mai
  • 新手小白学Java

    刚开始学习java的时候 可能是一头雾水 不知道从何学起 还有很多Java小白 在刚自学Java的时候玩命的学习 玩命的记住Java原理 天天早上五点起床背Java的一些英文词汇 然后遇见一些未知的困难 让自己打到癫狂状态 逐渐迷失自我放弃
  • 主频计算-架构真题(二十三)

    某文件系统采用多级索引结构 若磁块大小为4K字节 每个块号需占4个字节 那么采用二级索引结构时的文件最大长度可占用 个物理块 1 1024 2 1024 1024 3 2048 2048 4 4096 4096 答案 B 解析 磁盘大小 块
  • SpringBoot 优雅停止服务的几种方法

    一 准备工作 1 1 准备一个项目 随便创建一个Spring Boot项目 这里使用的是截止到2020年5月 最新的版本 2 2 7 RELEASE 1 2 创建一个bean 我们创建一个Bean 有一个销毁的方法 Componentpub
  • [杂谈随感-4]:架构师应具备的技能以及架构师的价值等级

    目录 前言 第1章 什么是架构 第2章 架构师初识 2 1 什么是架构师 2 2 架构师的分类 2 3 架构师的关注点 第3章 架构师的能力要求 1 技术能力 业务相关 2 架构能力 计算机相关 3 沟通能力 第4章 架构师的价值与价值等级
  • 并发编程专题06-java锁的深度化

    Java锁的深度化 下一篇 Disruptor框架 悲观锁 乐观锁 排他锁 重入锁 悲观锁与乐观锁 悲观锁 悲观锁悲观的认为每一次操作都会造成更新丢失问题 在每次查询时加上排他锁 每次去拿数据的时候都认为别人会修改 所以每次在拿数据的时候都
  • java架构师进阶之路

    Java架构师 应该算是一些Java程序员们的一个职业目标了吧 很多码农码了五六年的代码也没能成为架构师 那成为Java架构师要掌握哪些技术呢 总体来说呢 有两方面 一个是基础技术 另一个就是组织能力和提出解决方案能力了 如果你是想成为Ja
  • 领域驱动设计DDD

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

    文章目录 领域事件 识别领域事件 领域事件相关案例 领域事件总体架构 领域事件 领域事件是领域模型中非常重要的一部分 用来表示领域中发生的事件 一个领域事件将导致进一步的业务操作 在实现业务解耦的同时 还有助于形成完整的业务闭环 举例来说的
  • 怎样才能从Java初级程序员成长为一名合格的架构师?

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师 或者说一名合格的架构师应该有怎样的技术知识体系 这不仅仅是一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题 下面 我来详细回答这些问题 希望这篇文章
  • 缓存案例-架构真题(二十二)

    试题一 某大型电商平台建立一个B2B商店系统 并在全国建设了仓储中心 但是在运营过程中 发现很多跨仓储中心调货 延误运送 为此建立全国仓储系统 通过对订单的分析和挖掘 并通过大数据分析预测各类配置 降低成本 当用户通过B2B商店下单 会通过
  • 字节一面:HTTPS 会加密 URL 吗?

    有朋友在面试字节 被问到这个问题 HTTPS 会加密 URL 吗 答案是 会加密的 因为 URL 的信息都是保存在 HTTP Header 中的 而 HTTPS 是会对 HTTP Header HTTP Body 整个加密的 所以 URL
  • 架构师进阶之路

    选择的范围太广 可以读的书太多 往往容易无所适从 我想就我自己读过的技术书籍中挑选出来一些 按照学习的先后顺序 推荐给大家 特别是那些想不断提高自己技术水平的Java程序员们 一 Java编程入门类 对于没有Java编程经验的程序员要入门
  • 心态:晋升的为什么不是你--架构师之道

    2011年底的时候 在网上看了一篇文章 能让你少奋斗10年的工作经验 其中大部分条目与工作态度相关 有实例 可操作 故有此感慨 职场纵横 如果下面8条 你也符合部分状态 或许 这就是 晋升的为什么不是你 的答案了 一 心灵停留在舒适区是不可
  • 开源大数据工具汇总

    查询引擎 一 Phoenix 贡献者 Salesforce 简介 这是一个Java中间层 可以让开发者在Apache HBase上执行SQL查询 Phoenix完全使用Java编写 代码位于GitHub上 并且提供了一个客户端可嵌入的JDB
  • 软件系统工具-架构师真题(六)

    不属于可修改性考虑的内容 2016 可维护性 可扩展性 结构重构 可变性 答案 D 解析 可修改性指快速较高的性能价格进行系统优化 包括可维护性 可扩展性 结构重组和可移植性四个方面 软件系统工具中 软件评价工具属于 逆向工程工具 开发信息
  • 项目时间管理-架构真题(二十四)

    1 霍尔提出了系统方法的三维结构体系 通常称为霍尔三维结构 这就是系统工程方法论的基础 霍尔三维结构以时间堆 堆 知识堆组成的立体结构概括性表示出系统工程在各阶段 各步骤以及所涉及的知识范围 其中时间维是系统的工作进程 对于一个具体的工程项
  • 软件结构化设计-架构真题(二十七)

    2019年 进程P有8个页面 页号分别为0 7 状态位等于1和0分别表示在内存和不在内部才能 假设系统给P分配4个存储块 如果进程P要访问页面6不在内存 那么应该淘汰号是多少 答案 页号2 解析 页号1 2 5 7在内部内存里 而2的被访问
  • 系统架构设计师 8:系统质量属性与架构评估

    软件系统属性包括功能属性和质量属性 软件架构重点关注的是质量属性 为了精确 定量地表达系统的质量属性 通常会采用质量属性场景的方式进行描述 在确定软件系统架构 精确描述质量属性场景后 就需要对系统架构进行评估 软件系统架构评估是在对架构分析
  • 【实践篇】领域驱动设计:DDD工程参考架构

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

随机推荐

  • 蓝桥杯真题七段码

    题目 七段码对应的a b c d e f g分别用数字0 1 2 3 4 5 6表示 一 DFS check函数 这里与普通的dfs并不相同 因为这里的dfs不要求一定要到达叶子节点 但是dfs方法走了很多多余的路太笨了 这是我最开始的想法
  • vscode常用配置、快捷键及插件使用

    一 配置 通过文件 首选项 设置 或者ctrl 即可打开设置页面 以下是一些常用设置 1 字体 可以直接设置fontsize大小 也可以通过勾选mouse wheel zoom 去使用ctrl 滚轮对字体大小进行缩放 2 word wrap
  • Django-模型层(多表操作)

    1 创建模型 表和表之间的关系 一对一 多对一 多对多 用book表和publish表自己来想想关系 想想里面的操作 加外键约束和不加外键约束的区别 一对一的外键约束是在一对多的约束上加上唯一约束 实例 我们来假定下面这些概念 字段和关系
  • 2022福大数学建模赛题B题-多元 Logistic回归分类模型-附Python完整代码

    题目 第3题 请根据附件 2 所提供的部分食物寒热属性 分为三类 性平 性温热 性凉寒 对附 件 1 中的食物进行分类 判断这些食物是属于性平 性温热或性凉寒中哪一类 并说明你分类 的合理性 思路 如果食品寒热属性与其成分之间都是线性关系
  • SOIC 和 SOP区别

    SOP是一种很常见的封装形式 始于70年代末期 SOP封装的应用范围很广 而且以后逐渐派生出SOJ J型引脚小外形封装 TSOP 薄小外形封装 VSOP 甚小外形封装 SSOP 缩小型SOP TSSOP 薄的缩小型SOP 及SOT 小外形晶
  • 9月5日晚盘黄金原油交易策略

    9月5日 美黄金主力合约1912合约 晚间分析 技术分析 早盘中我们看空在1559附近开始看空截止下午空单获得丰厚的利润 在下午2点以后出现一次 强有力的反弹 但依然在空头趋势中 至此我们可以确定图中两条趋势线 交易策略 开仓方向 做空为主
  • 使用CopperCube(IrrEdit)创建Irrlicht场景

    使用CopperCube IrrEdit 创建Irrlicht场景 标签 Irrlicht游戏引擎 2013 11 22 19 32 3384人阅读 评论 7 收藏 举报 分类 Irrlicht 13 版权声明 本文为博主原创文章 未经博主
  • SQL语句补充--增删改查 limit 排序 分组 连表操作

    create table tb1 id int auto increment primary key name varchar 32 age int engine innodb default charset utf8 增 insert i
  • AR APP测试:现有工具简单调研

    最近要对开发的一个AR APP进行测试 于是在网上搜了一下现有的AR APP测试工具和实践 但是 目前能找到的工具和系统的实践教程并不多 可能正如这本书 1 所说 在这个领域仍然没有足够的测试工具或成熟的测试方法 测试是根据上下文定制的 现
  • c语言,算数运算符、关系运算符、逻辑运算符、赋值运算符、三目运算符、分支结构、运算符优先级以及执行顺序

    算术运算符 除 1 参与的数类型都是整型时 做取整运算 即商n余m 结果为n 2 只要有一个浮点数参与 就会做类似精确运算 取余 取余运算符号 也叫取模运算符号 做除法运算时 商n余m 结果为m 而且被除数必须是整数 1 参与运算都是整数时
  • Android sdk工程搭建(aar)

    Android sdk工程搭建 aar Unity 和 Android 交互流程 AndroidJavaClass public AndroidJavaClass string className className 指定类名 java l
  • 恒压供水一拖三程序图纸(看描述)恒压供水一拖三图纸程序

    恒压供水一拖三程序图纸 看描述 恒压供水一拖三图纸程序 1 采用西门子SMART SR20 CPU 加AE04模块 2 触摸屏采用昆仑通态 同时通讯PLC和变频器 3 PLC模拟量检测压力 变频器PID控制 PLC检测频率加减泵 4 此程序
  • tplogin服务器无响应,tplogin.cn打不开解决教程

    TP Link TL WDR6600 有线路由器作为无线交换机应用设定实例教程 1 电脑连接和无线路由器 将设定连接电脑到无线路由器的LAN口 保证系统自动获得到IP地址和DNS服务器ip 以下 留意 以便防止IP地址或DHCP网络服务器矛
  • 查看linux jvm使用情况,查看jvm内存使用命令

    jmap linux下特有 也是很经常使用的一个命令 java 观察运行中的jvm物理内存的占用状况 linux 参数以下 数据库 heap 打印jvm heap的状况 histo 打印jvm heap的直方图 其输出信息包括类名 对象数量
  • oracle提示 o s-error,【案例】Oracle报错OSD-04016 O/S-Error 使用dd复制数据块恢复数据...

    天萃荷净 运维DBA反映数据库在异常断电导致硬盘IO出现O S Error OS 23 数据错误 循环冗余检查 错误 分析原因为坏块导致 通过dd来复制数据块修复数据库 一台数据库因为异常断电导致硬盘IO出现O S Error OS 23
  • 在vue项目引入天地图,根据经纬度获取具体地址

    1 申请key 天地图地图服务对所有用户开放 使用本组服务之前 需要申请Key 2 引入API 地图API是由JavaScript语言编写的 您在使用之前需要通过
  • OpenCV——双边滤波

    目录 一 双边滤波 二 C 代码 三 python代码 四 结果展示 一 双边滤波 双边滤波是一种综合考虑滤波器内图像空域信息和滤波器内图像像素灰度值相似性的滤波算法 可以实现在保留区域信息的基础上实现对噪声的去除 对局部边缘的平滑 双边滤
  • 神码ai伪原创【php源码】

    大家好 小编为大家解答python必备常用英语词汇笔记的问题 很多人还不知道python中常用的英语单词 现在让我们一起来看看吧 火车头采集ai伪原创插件截图 一 什么是注释 注释是对一段代码的解释 不参与程序运行 起到提示作用 教我pyt
  • Windows注册表互换Caps Lock、Shift、Ctr l键

    按键映射 在注册表找到 HKEY LOCAL MACHINE SYSTEM CurrentControlSet Control Keyboard Layout 下如果没有Scancode Map就新建一个二进制值项名为Scancode Ma
  • 有了这两本书,学习领域驱动设计会很容易

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