第1部分 使用C#和.NET
第1章 C#和.NET相关概念及使用说明
1.1 C#的优势
1.1.1 C#的经济性
1.1.2 C#的可维护性
1.1.3 C#的易于操作性
1.2 为什么有时不使用C#
1.2.1 操作系统开发
1.2.2 嵌入式开发
1.2.3 数值计算
1.3 C#使用入门
1.4 本书涉及C#的主要内容
1.5 本书不涉及的C#内容
1.6 总结
第2章 .NET及其编译
2.1 .NET框架
2.2 .NET
2.3 兼容CLI的语言的编译
2.3.1 C#代码(高级语言)的编译
2.3.2 通用中间语言(汇编层)的编译
2.3.3 本地代码(处理器层)的处理
2.4 练习
2.5 总结
第2部分 现有代码库
第3章 这个代码有多糟糕
3.1 飞翔荷兰人航空公司简介
3.2 应用代码库的基本要求
3.2.1 映射对象关系
3.2.2 GET/flight终端地址——检索所有航班的信息
3.2.3 GET/flight/终端地址——获取特定航班信息
3.2.4 POST/booking/终端地址——预定航班
3.3 保存部分现有代码
3.3.1 评估现有数据库架构及数据表
3.3.2 现有代码库的网络服务配置文件
3.3.3 查看现有代码库中的模型和视图
3.4 总结
第4章 非托管资源管理
4.1 FlightController——GET/flight
4.1.1 GET/flight终端地址以及它的功能
4.1.2 方法签名——响应类型的含义和typeof
4.1.3 使用集合收集航班信息
4.1.4 使用连接字符串的弊端
4.1.5 使用IDisposable释放托管资源
4.1.6 使用SqlCommand查询数据库
4.2 FlightController:GET/flight/{flightNumber}
4.3 FlightController:POST/flight
4.4 TheFlightController:DELETE/flight/{flightNumber}
4.5 练习
4.6 总结
第3部分 数据库访问层
第5章 使用:Entity Framework Core设置项目和数据库
5.1 创建.NET5解决方案和项目
5.2 设置和配置网络服务
5.2.1 配置一个.NET5网络服务
5.2.2 创建和使用HostBuilder
5.2.3 创建Startup文件
5.2.4 使用存储/服务模式作为网络服务架构
5.3 构建数据库访问层
5.3.1 Entity Framework Core和逆向
5.3.2 DbSet和Entity Framework Core工作流程
5.3.3 配置方法和环境变量
5.3.4 Windows中环境变量设置
5.3.5 macOS中环境变量设置
5.3.6 通过代码检索运行环境变量
5.4 练习
5.5 总结
第4部分 存储层
第6章 测试驱动开发和依赖注入
6.1 测试驱动开发
6.2 CreateCustomer方法
6.2.1 验证输入参数
6.2.2 使用arrange、act和assert流程编写单元测试
6.2.3 无效字符的验证
6.2.4 具有[DataRow]属性的内联测试
6.2.5 对象初始化器和自动生成代码
6.2.6 构造器、反射和异步编程
6.2.7 lock锁、mutex互斥锁和semaphore信号量
6.2.8 同步执行转换到异步执行
6.2.9 Entity Framework Core测试
6.2.10 依赖注入控制依赖关系的使用
6.3 练习
6.4 总结
第7章 对象比较
7.1 GetCustomerByName方法
7.1.1 可空类型及其应用
7.1.2 LINQ和扩展方法
7.2 C#的由来
7.2.1 应用EqualityComparer创建“比较器”类
7.2.2 覆盖Equals测试等价性
7.2.3 重载等价运算符
7.3 练习
7.4 总结
第8章 stub泛型和耦合
8.1 Booking存储库的实现
8.2 关注点分离与耦合
8.3 对象初始化器的使用
8.4 stub单元测试的使用
8.5 泛型编程的使用
8.6 使用可选参数提供默认参数
8.7 条件语句、Func和switch表达式
8.7.1 三元条件运算符
8.7.2 使用函数数组进行分支
8.7.3 switch语句和表达式
8.7.4 Entity Framework Core中的待处理更改查询
8.8 练习
8.9 总结
第9章 扩展方法、流和抽象类
9.1 Airport存储库的实现
9.2 Airport对象的获取——通过机场ID数据库
9.3 AirportID输入参数的验证
9.4 输出流
9.5 Airport对象的获取——通过数据库查询
9.6 Flight存储库的实现
9.6.1 IsPositive扩展方法和“魔法数字”
9.6.2 数据库中航班的获取
9.7 练习
9.8 总结
第5部分 服务层
第10章 反射和模拟
10.1 回顾存储/服务模式
10.1.1 服务类的用途是什么?
10.2 实现CustometService
10.2.1 为成功做准备——创建类骨架
10.2.2 删除自己代码的方法
10.3 BookingService的实现
10.3.1 跨架构层的单元测试
展开