本书讲解.NET平台下的异步编程、LINQ、依赖注入、配置系统、日志等相关技术的原理与应用;深入且全面地介绍Entity Framework Core在项目中的应用场景,剖析Entity Framework Core的实现原理。本书在讲解使用ASP.NET Core进行Web API开发的同时,结合作者的实践经验介绍REST、前后端分离等编程理念在ASP.NET Core中的实现。此外,本书还会介绍领域驱动设计(DDD)的理念,并且通过来自项目开发一线的案例讲解DDD理念在项目中的技术落地方案。最后,本书通过真实的英语学习网站的项目案例讲解ASP.NET Core技术在项目中的应用。总体而言,本书不仅介绍技术的使用,而且讲解技术的底层原理;不仅介绍作者在项目开发一线的实践经验,而且讲解综合项目案例的具体实现。
本书可供具有一定编程基础的开发人员学习ASP.NET Core的使用方法,也可供具有一定经验的.NET开发人员了解.NET的内部原理和学习相关项目实战经验,还可作为大中专院校学生的ASP.NET Core教材。
Author(s): 杨中科
Publisher: 人民邮电出版社
Year: 2022
Language: Chinese
Pages: 412
Tags: C#
目录
封面
扉页
版权信息
内容提要
推荐序一
推荐序二
推荐序三
自序
前言
第1章 .NET Core入门
1.1 .NET Core概述
1.1.1 .NET平台的昨天
1.1.2 为什么要跨平台
1.1.3 .NET Core是.NET Framework的升级版吗
1.1.4 .NET Framework中哪些技术不被支持
1.1.5 .NET Standard是什么
1.1.6 项目应该使用.NET Core开发吗
1.2 .NET Core开发环境的搭建
1.2.1 用什么开发工具开发.NET Core
1.2.2 .NET Core项目结构的创新
1.3 本章小结
第2章 .NET Core重难点知识
2.1 C#的新语法
2.1.1 顶级语句
2.1.2 全局using指令
2.1.3 using声明
2.1.4 文件范围的命名空间声明
2.1.5 可为空的引用类型
2.1.6 记录类型
2.2 异步编程
2.2.1 为什么要用异步编程
2.2.2 轻松上手await、async
2.2.3 如何编写异步方法
2.2.4 async、await原理揭秘
2.2.5 async背后的线程切换
2.2.6 异步方法不等于多线程
2.2.7 为什么有的异步方法没有async
2.2.8 异步编程的几个重要问题
2.3 LINQ
2.3.1 Lambda表达式
2.3.2 常用集合类的扩展方法
2.3.3 LINQ的另一种写法
2.4 本章小结
第3章 .NET Core核心基础组件
3.1 依赖注入
3.1.1 什么是控制反转、服务定位器和依赖注入
3.1.2 .NET Core依赖注入的基本使用
3.1.3 依赖注入的魅力所在
3.2 配置系统
3.2.1 配置系统的基本使用
3.2.2 使用选项方式读取配置
3.2.3 从命令行读取配置
3.2.4 从环境变量读取配置
3.2.5 其他配置提供程序
3.2.6 案例:开发自己的配置提供程序
3.2.7 多配置源问题
3.3 日志
3.3.1 .NET Core日志基本使用
3.3.2 文件日志提供程序NLog
3.3.3 集中式日志
3.4 本章小结
第4章 Entity Framework Core基础
4.1 EF Core概述
4.1.1 什么是ORM
4.1.2 EF Core性能怎么样
4.2 EF Core入门
4.2.1 该选择什么数据库
4.2.2 EF Core环境搭建
4.2.3 插入数据
4.2.4 查询数据
4.2.5 修改和删除数据
4.3 EF Core的实体类配置
4.3.1 约定大于配置
4.3.2 Data Annotation
4.3.3 Fluent API
4.3.4 Fluent API基本配置
4.3.5 Fluent API究竟流畅在哪里
4.3.6 主键类型的选择并不简单
4.4 数据库迁移
4.4.1 数据库迁移原理
4.4.2 其他数据库迁移命令
4.4.3 反向工程(慎用)
4.5 查看EF Core生成的SQL语句
4.5.1 使用简单日志查看SQL语句
4.5.2 探秘EF Core生成SQL语句的不同
4.6 关系配置
4.6.1 一对多
4.6.2 关联数据的获取
4.6.3 实体类对象的关联追踪
4.6.4 关系的外键属性的设置
4.6.5 单向导航属性
4.6.6 关系配置在哪个实体类中
4.6.7 一对一
4.6.8 多对多
4.6.9 基于关系的复杂查询
4.7 本章小结
第5章 EF Core高级技术
5.1 EF Core原理揭秘
5.1.1 EF Core有哪些做不到的事情
5.1.2 既生IEnumerable,何生IQueryable
5.1.3 IQueryable的延迟执行
5.1.4 IQueryable的复用
5.1.5 EF Core分页查询
5.1.6 IQueryable的底层运行
5.1.7 EF Core中的异步方法
5.1.8 如何执行原生SQL语句
5.1.9 怎么知道实体类变化了
5.2 EF Core的性能优化利器
5.2.1 EF Core优化之AsNoTracking
5.2.2 实体类状态跟踪的妙用
5.2.3 Find和FindAsync方法
5.2.4 EF Core中高效地删除、更新数据
5.2.5 全局查询筛选器
5.2.6 悲观并发控制
5.2.7 乐观并发控制
5.3 表达式树
5.3.1 什么是表达式树
5.3.2 Expression和Func的区别
5.3.3 可视化查看表达式树
5.3.4 通过代码查看表达式树
5.3.5 通过代码动态构建表达式树
5.3.6 让动态构建表达式树更简单
5.3.7 让构建“动态”起来
5.3.8 不用Emit实现Select的动态化
5.3.9 避免动态构建表达式树
5.4 本章小结
第6章 ASP.NET Core Web API基础
6.1 ASP.NET Core MVC项目
6.1.1 ASP.NET Core MVC项目的搭建
6.1.2 编写第一个MVC程序
6.1.3 .NET Core的新工具:热重载
6.2 使用ASP.NET Core开发Web API
6.2.1 Web API项目的搭建
6.2.2 Post、Put等操作方法
6.3 Restful:想说爱你不容易
6.3.1 什么是Restful
6.3.2 Restful的优缺点
6.3.3 Restful中如何传递参数
6.3.4 返回错误码:200派与4xx派的“对决”
6.3.5 Restful实现指南
6.4 ASP.NET Core Web API各种技术及选择
6.4.1 控制器父类用哪个
6.4.2 操作方法的异步、返回值、状态码
6.4.3 操作方法的参数从哪里来
6.5 ASP.NET Core Web API案例
6.5.1 开发Web API
6.5.2 什么是前后端分离
6.5.3 搭建前端开发环境
6.5.4 如何实现前后端分离开发
6.6 本章小结
第7章 ASP.NET Core基础组件
7.1 ASP.NET Core中的依赖注入
7.1.1 对象注入的代码写到哪里
7.1.2 低使用频率服务的另类注入方式
7.1.3 案例:开发模块化的服务注册框架
7.2 配置系统与ASP.NET Core的集成
7.2.1 默认添加的配置提供者
7.2.2 ASP.NET Core的多环境设置
7.2.3 用“用户机密”来避免机密信息的泄露
7.2.4 案例:配置系统综合
7.3 EF Core与ASP.NET Core的集成
7.3.1 分层项目中EF Core的用法
7.3.2 使用“上下文池”时要谨慎
7.3.3 案例:批量注册上下文
7.4 性能优化“万金油”:缓存
7.4.1 什么是缓存
7.4.2 客户端响应缓存
7.4.3 服务器端响应缓存
7.4.4 内存缓存
7.4.5 缓存穿透问题的规避
7.4.6 缓存雪崩问题的规避
7.4.7 缓存数据混乱的规避
7.4.8 案例:封装内存缓存操作的帮助类
7.4.9 分布式缓存
7.4.10 案例:封装分布式缓存操作的帮助类
7.4.11 缓存方式的选择
7.5 筛选器
7.5.1 异常筛选器
7.5.2 操作筛选器基础
7.5.3 案例:自动启用事务的操作筛选器
7.5.4 案例:开发请求限流器
7.6 中间件
7.6.1 什么是中间件
7.6.2 中间件的3个概念
7.6.3 简单演示中间件
7.6.4 案例:自己动手模仿Web API框架
7.6.5 调整内置中间件的顺序,结果大不同
7.6.6 案例:Markdown转换器中间件
7.6.7 筛选器与中间件的区别
7.7 本章小结
第8章 ASP.NET Core高级组件
8.1 Authentication与Authorization
8.1.1 标识框架
8.1.2 实现密码的重置
8.1.3 代替Session(会话)的JWT
8.1.4 JWT的基本使用
8.1.5 ASP.NET Core对于JWT的封装
8.1.6 [Authorize]的注意事项
8.1.7 让Swagger中调试带验证的请求更简单
8.1.8 解决JWT无法提前撤回的难题
8.1.9 总结
8.2 利用托管服务执行后台代码
8.2.1 托管服务的基本使用
8.2.2 托管服务中使用依赖注入的陷阱
8.2.3 案例:数据的定时导出
8.3 请求数据的校验
8.3.1 .NET Core内置数据校验的不足
8.3.2 FluentValidation的基本使用
8.3.3 FluentValidation中注入服务
8.4 SignalR服务器端消息推送
8.4.1 SignalR基本使用
8.4.2 协议协商
8.4.3 SignalR分布式部署
8.4.4 SignalR身份认证
8.4.5 针对部分客户端的消息推送
8.4.6 在外部向集线器推送消息
8.4.7 案例:导入英汉词典到数据库并显示进度
8.4.8 SignalR实践指南
8.5 ASP.NET Core系统的部署
8.5.1 ASP.NET Core网站的发布
8.5.2 网站部署需要注意的几个问题
8.5.3 如何构建一个安全的系统
8.6 本章小结
第9章 DDD实战
9.1 架构设计的术与道
9.1.1 架构设计之怪现状
9.1.2 架构是进化而来的
9.2 DDD的基本概念
9.2.1 什么是微服务
9.2.2 微服务架构的误区
9.2.3 DDD为什么难学
9.2.4 领域与领域模型
9.2.5 通用语言与界限上下文
9.2.6 实体类与值对象
9.2.7 聚合与聚合根
9.2.8 领域服务与应用服务
9.2.9 领域事件与集成事件
9.3 DDD的技术落地
9.3.1 贫血模型与充血模型
9.3.2 EF Core对实体类属性操作的秘密
9.3.3 EF Core中实现充血模型
9.3.4 EF Core中实现值对象
9.3.5 案例:构建表达式树,简化值对象的比较
9.3.6 千万不要面向数据库建模
9.3.7 聚合在.NET中的实现
9.3.8 用MediatR实现领域事件
9.3.9 EF Core中发布领域事件的合适时机
9.3.10 RabbitMQ的基本使用
9.3.11 案例:简化集成事件的框架
9.3.12 案例:Zack.EventBus源代码讲解
9.3.13 整洁架构(洋葱架构)
9.4 DDD案例实战:用户管理及登录
9.4.1 实现整洁架构项目分层
9.4.2 领域模型的实现
9.4.3 领域服务的实现
9.4.4 基础设施的实现
9.4.5 工作单元的实现
9.4.6 应用服务层的实现
9.5 本章小结
第10章 项目案例:英语学习网站
10.1 需求说明及项目演示
10.1.1 网站需求说明
10.1.2 网站结构说明
10.1.3 项目结构说明
10.1.4 项目运行环境搭建
10.1.5 主要功能演示
10.2 文件服务的开发
10.2.1 开发文件服务的领域层
10.2.2 开发文件服务的基础设施层
10.3 认证服务的开发
10.3.1 开发认证服务的领域层
10.3.2 开发认证服务的基础设施层
10.3.3 开发认证服务的应用服务层
10.4 英语听力服务的开发
10.4.1 开发英语听力服务的领域层
10.4.2 开发英语听力服务的后台应用服务层
10.4.3 开发英语听力服务的前台应用服务层
10.5 转码服务的开发
10.5.1 开发转码服务的领域层
10.5.2 开发转码服务的基础设施层
10.5.3 开发转码服务的应用服务层
10.6 搜索服务的实现
10.7 性能优化的原则
10.8 项目总结
10.9 本章小结