本书系统介绍软件的设计思想、架构和开发模式,便于读者能够快速建立软件开发的知识体系,并通过学习基于ASP.NET Core的项目案例,掌握如何利用这些知识高效开发稳定的Web应用程序。
本书共10章,分为2篇。第1篇介绍软件设计思想、软件架构、面向对象编程的六大原则和设计模式等,本篇内容是软件开发初学者晋升道路上必须掌握的知识。第2篇首先介绍领域驱动设计,然后通过项目案例,展示以领域模型为核心的Web应用程序的完整开发过程,本篇内容体现了高品质软件开发的核心价值,也体现了面向对象程序设计的思想价值。
本书理论结合实践,讲解深入浅出,适合有一定C#语言基础的Web开发人员阅读,尤其适合想要进一步晋升自己知识体系和水平的Web程序员阅读。另外,本书也可以作为相关培训机构的教材使用。
目录
- 前言
- 第1篇 软件开发内功心法
- 第1章 如何开始一个软件项目2
- 1.1 软件项目开发面临的挑战2
- 1.1.1 领域模型的创建3
- 1.1.2 架构的选择4
- 1.1.3 软件框架的使用5
- 1.1.4 数据存储的实现6
- 1.2 小结6
- 第2章 软件如何解决问题7
- 2.1 软件的发展历程7
- 2.1.1 面向过程的编程8
- 2.1.2 面向对象的编程9
- 2.1.3 面向组件的编程16
- 2.1.4 面向方面的编程19
- 2.1.5 综述21
- 2.2 对象的意义21
- 2.2.1 对象和类型22
- 2.2.2 对象的创建和生命周期的控制23
- 2.2.3 对象的依赖26
- 2.3 组件26
- 2.3.1 接口与实现分离27
- 2.3.2 接口分解30
- 2.3.3 接口的多重实现与继承33
- 2.3.4 接口与契约式编程34
- 2.4 小结35
- 第3章 软件架构36
- 3.1 软件架构概述36
- 3.1.1 软件架构的定义36
- 3.1.2 软件架构风格和架构模式38
- 3.1.3 4+1视图40
- 3.2 主流软件架构简介41
- 3.2.1 分层架构41
- 3.2.2 MVC架构45
- 3.2.3 REST架构47
- 3.2.4 微服务架构52
- 3.3 小结54
- 第4章 面向对象的设计模式和原则55
- 4.1 重用55
- 4.1.1 继承重用56
- 4.1.2 组合重用60
- 4.1.3 模式重用62
- 4.2 面向对象的设计原则63
- 4.2.1 单一职责原则63
- 4.2.2 开闭原则65
- 4.2.3 里氏代换原则67
- 4.2.4 依赖倒置原则71
- 4.2.5 接口隔离原则73
- 4.2.6 迪米特法则75
- 4.3 设计模式79
- 4.3.1 设计模式的定义80
- 4.3.2 设计模式的分类和应用80
- 4.3.3 如何使用设计模式81
- 4.4 小结81
- 第5章 项目概况与架构设计83
- 5.1 iShopping项目83
- 5.1.1 项目简介83
- 5.1.2 用Java还是.NET Core84
- 5.1.3 集成开发环境85
- 5.2 iShopping的架构设计86
- 5.2.1 领域驱动设计和逻辑视图86
- 5.2.2 开发视图88
- 5.2.3 进程视图89
- 5.2.4 物理视图91
- 5.2.5 场景视图92
- 5.3 小结93
- 第2篇 领域驱动设计落地
- 第6章 领域模型96
- 6.1 领域驱动设计96
- 6.2 领域对象的识别与创建98
- 6.2.1 实体对象99
- 6.2.2 实体对象的标识和替换104
- 6.2.3 值对象108
- 6.2.4 用值对象封装复杂的逻辑114
- 6.3 整体设计124
- 6.3.1 领域的划分125
- 6.3.2 限界上下文127
- 6.3.3 限界上下文的映射128
- 6.4 聚合142
- 6.4.1 聚合对象142
- 6.4.2 使用聚合对象实现限界上下文143
- 6.4.3 聚合对象之间的导航151
- 6.4.4 聚合内部对象的实现和引用156
- 6.5 领域服务对象157
- 6.5.1 领域服务158
- 6.5.2 领域服务和应用服务160
- 6.5.3 领域服务与贫血模型161
- 6.6 领域事件163
- 6.6.1 领域事件简介164
- 6.6.2 领域事件的发布和订阅166
- 6.7 领域对象的生命周期176
- 6.7.1 工厂和构建器176
- 6.7.2 仓储对象179
- 6.8 小结182
- 第7章 综合运用领域模型183
- 7.1 商品目录上下文的实现183
- 7.1.1 商品分类聚合的实现184
- 7.1.2 商品聚合的实现192
- 7.2 订单上下文的实现202
- 7.2.1 购物车聚合的实现204
- 7.2.2 订单聚合的实现210
- 7.2.3 订单优惠聚合的实现224
- 7.2.4 订单费用计算服务的实现229
- 7.3 小结232
- 第8章 基础设施层的实现233
- 8.1 基础设施层的创建233
- 8.2 数据存储234
- 8.2.1 数据库设计范式235
- 8.2.2 事务238
- 8.2.3 NoSQL数据库240
- 8.3 对象关系映射241
- 8.3.1 对象-数据库阻抗失配241
- 8.3.2 对象关系映射的困难242
- 8.3.3 传统的数据访问技术ADO.NET243
- 8.4 Entity Framework Core框架247
- 8.4.1 Entity Framework Core的引用247
- 8.4.2 Entity Framework Core简介249
- 8.4.3 实现自定义数据上下文252
- 8.4.4 实现对象仓储270
- 8.5 MongoDB应用280
- 8.5.1 MongoDB数据库281
- 8.5.2 使用MongoDB实现对象仓储283
- 8.6 RabbitMQ应用287
- 8.6.1 RabbitMQ的安装和配置288
- 8.6.2 使用RabbitMQ实现事件总线290
- 8.7 使用第三方WebAPI297
- 8.7.1 WebAPI访问技术297
- 8.7.2 使用WebAPI实现运输距离的计算300
- 8.8 小结303
- 第9章 应用程序层的实现304
- 9.1 应用程序层简介304
- 9.1.1 应用程序层和应用服务306
- 9.1.2 应用服务的接口形式310
- 9.1.3 CQRS风格的应用服务312
- 9.1.4 事件存储317
- 9.2 实现查询的方法319
- 9.2.1 对象的映射319
- 9.2.2 查询过滤器321
- 9.2.3 数据代理327
- 9.2.4 查询门面334
- 9.3 小结341
- 第10章 展示层和MVC框架342
- 10.1 ASP.NET Core MVC框架342
- 10.1.1 路由343
- 10.1.2 MVC简介346
- 10.1.3 控制器349
- 10.1.4 控制器和领域模型352
- 10.1.5 视图和模型354
- 10.1.6 OWIN和反向代理358
- 10.2 ASP.NET Core MVC项目361
- 10.2.1 搭建MVC362
- 10.2.2 依赖注入容器367
- 10.2.3 搭建前端开发框架371
- 10.3 控制器和视图的实现372
- 10.3.1 控制器和视图373
- 10.3.2 视图的表单提交377
- 10.3.3 视图与服务器的异步通信379
- 10.4 小结382