全新正版书籍,24小时发货,可开发票。
¥ 73.3 5.3折 ¥ 138 全新
库存37件
作者甄镭
出版社清华大学出版社
ISBN9787302649359
出版时间2024-01
装帧平装
开本16开
定价138元
货号29666034
上书时间2024-12-02
如果你的用户、老板或者产品经理告诉你“这个需求很简单”,请千万不要相信。真实世界中,需要动手编程去解决的问题都不是简单的问题,你会面临业务复杂性和技术复杂性的双重挑战。首先是业务复杂性,用户一目了然的问题对你来说却是一头雾水,用户不会告诉你对他们来说是理所当然的事情,这还不算用户在提需求时可能根本没考虑周全,希望你“先出一个版本再说”。好不容易弄懂了需求(或者说以为弄懂了需求),接下来需要对付技术复杂性,这时时间已经过半,想不了那么多了,只能用自己最熟悉的框架或者参考以前做过的项目开始开发。终于出了一个版本,用户看了感觉还行(运气好的话),但是总会提出“还有几个小问题”,或者说“上次漏了几点”,希望“尽快再出一版”。这时,你会发现现有的架构已经无法支撑新增的需求。重写?一方面舍不得,另一方面“时间紧”,只好硬着头皮上。几轮循环下来,你自己清楚,软件已经摇摇欲坠了,如果再有一点新的需求加入可能就会崩溃。你已经准备离职了,只希望到新公司不要经历同样的情况。
软件的复杂性是固有的,既包括业务复杂性,也包括技术复杂性,领域驱动设计的目的在于寻求应对软件复杂性的方法。Eric Evans著名的《领域驱动设计—软件核心复杂性应对之道》这本书的书名正说明了这一点。但由于对“复杂性”的理解不同,导致很多人认为所开发的系统没那么复杂,因此没有必要使用领域驱动设计。在实践中,需要进行编程的项目都不是“简单”的:一方面由于所处的领域不同,对用户或业务专家而言是简单的问题,而对于开发人员来说往往是复杂的;另一方面,很多“复杂”的项目往往是从最初被认为是“简单”的项目演化而来的。所以说,不管在实际项目中是否使用领域驱动设计,了解相关的理论和概念都是非常必要的。
如何学习领域驱动设计?动手实践是学习软件开发的唯一有效途径,学习领域驱动设计也不例外。本书以一个读者易于理解并且具有一定弹性的项目为例,从零开始使用领域驱动设计的理论构建该项目,帮助读者从实践中了解领域驱动设计的各种概念,并提供这些概念对应的.Net实现方案。在理解概念的基础上,本书引导读者使用领域驱动设计方法构建各种类型的应用。
本书面向的读者
本书面向希望了解领域驱动设计的软件开发人员,包括刚入门的普通程序员,只要具备基本的面向对象编程基础并能使用C#编写代码,就可以阅读本书。领域驱动设计的一大主要优势在于将业务复杂性与技术复杂性分离出来:在业务建模阶段,只需具备基本的编程技能,就能够使用代码编写领域模型,而不需要对技术框架有过多的了解;在技术实现阶段,由于已经完成了领域模型的编写,因此可以更多地关注技术,而业务问题遵循领域模型即可。
本书的结构也是按照先业务后技术的顺序展开的。
本书的结构
本书分为3个部分:
第1部分介绍领域模型的基本概念、建模方法和如何验证领域模型。在这一部分中,以诗词游戏为实例介绍领域模型涉及的概念,如实体、值对象、聚合与聚合根、存储库、领域事件以及领域服务等,并使用这些概念完成领域模型的构建。另外,还介绍了如何使用单元测试和行为驱动开发工具对领域模型进行验证。最后,基于领域模型完成了简单的控制台应用。
第2部分着眼于技术实现。在领域模型中,使用接口抽象了技术实现,这些技术实现需要在基础设施层完成。这些技术实现包括:如何使用EF Core实现面向关系数据库的存储库,如何实现面向非关系数据库(如MongoDB)的存储库,以及如何实现领域事件等。
第3部分介绍如何构建各种类型的应用系统。在这一部分中,使用第1部分创建的领域模型和第2部分介绍的技术实现,根据软件架构,创建各种类型的应用,包括单体应用、前后端分离的单页面应用、桌面应用、移动应用和基于微服务的应用。最后,介绍了基于.Net的领域驱动设计技术框架ABP vNext,以及如何对系统进行提升与持续改进。
致谢
感谢同事和客户对笔者热心帮助,感谢家人对笔者的全面支持。
感谢清华大学出版社对笔者的信任和支持,感谢本书责任编辑为本书所做的工作。
反馈与交流
限于笔者的水平,书中难免存在疏漏之处,敬请各位读者批评指正。读者可以发送电子邮件至 zhenl@163.com提出意见或建议。
本书配套源码可通过微信扫描下方的二维码进行下载。如果在下载过程中遇到问题,请发送电子邮件至booksaga@126.com,邮件主题写“领域驱动设计.Net实践”。
最后,感谢各位读者选择本书,希望本书能对读者的学习有所助益。
笔 者
2023年11月
《领域驱动设计.Net实践》介绍领域驱动设计的基本概念和在.Net环境下使用领域驱动设计开发应用软件的基本方法。全书分为3个部分:第1部分(第1~6章)介绍领域模型和如何创建与验证领域模型;第2部分(第7~16章)介绍与领域驱动设计相关的.Net技术;第3部分(第17~26章)介绍如何以领域模型为核心构造各种类型的应用系统,并讲解项目的升级和演化方法。为了帮助读者更好地理解和应用领域驱动设计,本书选取诗词游戏项目作为示例,贯穿全书的3个部分,引导读者从零开始构建该项目,最终完成一个前后端分离的单页面应用和基于微服务架构的应用。 《领域驱动设计.Net实践》围绕示例项目开发,介绍使用行为驱动开发辅助领域模型验证、在开发中进行持续集成、源代码管理和程序包发布等技术,还介绍使用成熟的DDD技术框架进行项目开发的优缺点,以及系统提升与持续改进过程中需要注意的问题。 《领域驱动设计.Net实践》面向对领域驱动设计感兴趣的开发人员,包括刚入行的程序员,只要读者对.Net环境和C#语言有一定的了解就可以阅读本书。此外,本书也适合作为高等院校和培训机构相关专业的教学参考书。
甄镭,1992年同济大学毕业获学士学位,1995年北京科技大学毕业获硕士学位。1996年开始从事企业信息系统开发和建设工作,涉及石化、政务、汽车制造、机械制造、电力、房地产等诸多领域。参与过的重大项目包括“金陵石化公司炼油厂NR-CIMS应用示范工程”(863科技攻关计划项目)、“全国人大办公资源信息系统”等。著有《信息系统升级与整合》、《.Net与设计模式》
第1部分 创建领域模型
第1章 领域驱动设计的概念 2
1.1 软件的复杂性 2
1.2 领域驱动设计简介 3
1.2.1 限界上下文 3
1.2.2 战略设计 4
1.2.3 领域模型 5
1.2.4 通用语言 5
1.3 领域驱动设计使用中的难点 5
1.3.1 对软件复杂性理解的偏差 6
1.3.2 术语的理解 6
1.3.3 技术框架问题 7
1.3.4 英语障碍 8
1.4 学习和使用领域驱动设计的一些体会 9
1.4.1 理解领域驱动设计的精髓 9
1.4.2 使用“战略设计”规划项目 9
1.4.3 在开发过程中使用“战术设计” 10
1.4.4 在学习中尽量尝试各种技术,在实践中保持简洁 11
1.4.5 实事求是,避免将理论当作教条 11
1.5 本书概况 11
1.5.1 本书的目标和结构 11
1.5.2 为什么选择.Net 12
1.5.3 本书选择的示例 12
1.5.4 本书使用的开发环境 12
1.5.5 本书中的数据和代码 13
1.6 本章小结 13
第2章 从零开始构建诗词游戏 14
2.1 需求概述 14
2.2 领域、子域与限界上下文 15
2.3 限界上下文的初步确定 16
2.3.1 用户认证上下文 18
2.3.2 诗词游戏上下文 19
2.3.3 诗词服务上下文 19
2.3.4 游戏管理上下文 19
2.4 限界上下文映射 19
2.4.1 各行其道 20
2.4.2 已发布语言 20
2.4.3 开放主机服务 20
2.4.4 客户-供应商 21
2.4.5 跟随者 21
2.4.6 防腐层 21
2.4.7 合作方式 21
2.4.8 共享内核 22
2.5 诗词游戏上下文的通用语言 22
2.6 创建第一个版本 23
2.7 本章小结 27
第3章 理解领域模型 28
3.1 领域模型概述 28
3.2 实体 28
3.2.1 实体的基本概念 29
3.2.2 从业务概念中发现实体 31
3.2.3 实体中数据的封装 33
3.2.4 实体中的方法 35
3.2.5 为什么要避免“贫血”模型 37
3.3 值对象 38
3.3.1 值对象的概念 38
3.3.2 值对象的实现 39
3.3.3 在模型中使用值对象的好处 41
3.4 聚合和聚合根 42
3.5 存储库 43
3.5.1 存储库的概念 43
3.5.2 存储库接口示例 44
3.5.3 是否可以使用EF Core等技术代替存储库 46
3.5.4 构建测试用的存储库实现 46
3.6 领域事件 48
3.6.1 为什么需要领域事件 48
3.6.2 领域事件的概念 49
3.6.3 在项目中增加领域事件 49
3.7 重构项目框架 57
3.8 完善诗词服务 58
3.9 本章小结 62
第4章 领域服务与应用服务 63
4.1 第一个领域服务 63
4.2 对游戏进行优化 65
4.2.1 问题分析 65
4.2.2 设计模式的使用 66
4.2.3 解决方案 67
4.3 领域服务的引入 69
4.4 应用服务 72
4.4.1 创建游戏 73
4.4.2 游戏过程 77
4.5 领域服务与应用服务的区别 83
4.6 避免滥用领域服务 84
4.7 本章小结 84
第5章 领域模型的验证与演化 85
5.1 领域模型构建过程回顾 85
5.2 领域模型设计需要注意的几个问题 86
5.2.1 学习领域知识,充分沟通 86
5.2.2 分析模式与设计模式的使用 86
5.2.3 遵守软件设计的一般规律 86
5.2.4 避免过度抽象 87
5.3 使用测试框架创建验证领域模型的测试用例 87
5.3.1 创建测试项目 87
5.3.2 模拟对象的使用 91
5.3.3 对异常的测试 92
5.4 使用行为驱动设计工具SpecFlow验证领域模型 93
5.4.1 行为驱动设计与领域驱动设计 94
5.4.2 使用SpecFlow验证领域模型 94
5.5 创建控制台应用验证领域模型 98
5.6 领域模型发布 98
5.7 领域模型的演化与持续集成 102
5.8 本章小结 103
第6章 创建基于控制台的人机游戏 104
6.1 已完成工作回顾 104
6.2 人机游戏说明 105
6.3 系统结构 105
6.4 创建应用层 106
6.5 模拟机器人作答 110
6.6 编写客户端 114
6.7 需要解决的问题 118
6.7.1 对象创建方式过于复杂 118
6.7.2 简单工厂不能满足扩展需求 119
6.7.3 应用层没有隔离领域层 119
6.7.4 其他需要解决的问题 120
6.8 本章小结 121
第2部分 DDD .Net工具箱
第7章 DDD .Net相关技术概述 124
7.1 .Net简介 124
7.1.1 .Net的发展简史 124
7.1.2 .Net的版本 125
7.1.3 .Net的跨平台支持 125
7.2 .Net功能 125
7.2.1 异步编程模式 125
7.2.2 特性 126
7.2.3 反射 128
7.2.4 委托 129
7.2.5 事件 131
7.2.6 泛型 132
7.2.7 LINQ 133
7.3 与领域驱动设计实现相关的技术框架 134
7.3.1 依赖注入框架 134
7.3.2 ORM框架 134
7.3.3 对象映射框架 135
7.3.4 实时通信框架 135
7.3.5 进程内消息框架 135
7.4 本章小结 136
第8章 依赖倒置原则、控制反转与DDD架构 137
8.1 依赖倒置原则 137
8.1.1 概述 137
8.1.2 在设计中引入依赖倒置原则 138
8.1.3 设计期依赖与运行期依赖 140
8.1.4 依赖倒置实例 143
8.2 控制反转 144
8.2.1 问题的提出 144
8.2.2 理解控制反转 146
8.2.3 IoC容器 146
8.3 架构结构的转变 146
8.4 本章小结 148
第9章 工厂与依赖注入容器 149
9.1 工厂 149
9.1.1 工厂的概念 149
9.1.2 工厂设计模式 150
9.2 依赖注入容器 151
9.2.1 问题的提出 152
9.2.2 理解依赖注入 152
9.3 .Net内置的依赖注入容器 153
9.3.1 基本使用方法 153
9.3.2 服务对象的生命周期 153
9.3.3 服务的注册方法 154
9.3.4 多个构造函数的情况 156
9.4 依赖注入容器的使用 156
9.4.1 在控制台应用中使用依赖注入 156
9.4.2 改造简单工厂 157
9.4.3 可插拔组件架构实现 159
9.5 使用第三方DI容器满足高级需求 159
9.5.1 基本使用方法 160
9.5.2 属性注入 161
9.5.3 使用基于名称的注入改造工厂 161
9.5.4 程序集注册 163
9.6 本章小结 163
第10章 基于关系数据库的存储库实现 164
10.1 EF Core的基本功能 164
10.2 使用EF Core实现存储库 167
10.2.1 创建PlayerRepository 167
10.2.2 创建GameRepository 170
10.3 EF Core的深入应用 173
10.3.1 多数据库类型支持 173
10.3.2 生产环境的数据库部署 178
10.3.3 数据库生成标识 182
10.3.4 Data Annotations vs Flunt API 183
10.4 在控制台应用中使用新的存储库 184
10.5 使用其他数据库访问框架实现存储库 185
10.5.1 存储库的持久层框架需要满足的条件 185
10.5.2 Dapper 186
10.5.3 FreeSql 187
10.6 本章小结 187
第11章 存储库与NoSQL数据库 188
11.1 NoSQL数据库概述 188
11.1.1 键值对存储数据库 188
11.1.2 列存储数据库 188
11.1.3 文档型数据库 189
11.1.4 Graph数据库 189
11.1.5 实时数据库 189
11.2 文档数据库MongoDB概述 189
11.2.1 MongoDB介绍 189
11.2.2 MongoDB的安装 190
11.2.3 MongoDB的管理 190
11.2.4 MongoDB的基本概念 191
11.2.5 MongoDB的基本数据类型 191
11.3 创建面向MongoDB的存储库 192
11.3.1 使用MongoDB.Driver操作MongoDB 192
11.3.2 &
【现货速发】解构领域驱动设计
全新天津
¥ 79.30
【现货速发】领域驱动设计精粹
全新天津
¥ 34.10
【现货 速发】解构领域驱动设计
全新合肥
¥ 96.25
【现货 速发】解构领域驱动设计
全新安阳
¥ 89.95
【现货 速发】解构领域驱动设计
全新广州
¥ 96.25
【现货速发】领域驱动设计学习手册
全新天津
¥ 42.50
【现货速发】领域驱动设计:业务建模与架构实践
全新天津
¥ 58.10
【现货速发】价值观驱动
全新天津
¥ 41.60
现货速发 解构领域驱动设计9787115566232 软件设计文墨书籍
全新北京
¥ 104.90
【现货速发】Linux设备驱动开发
全新天津
¥ 87.40
— 没有更多了 —
以下为对购买帮助不大的评价