展开全部

主编推荐语

本书介绍如何使用各种工具、模式和方法将可读性、可维护性与可扩展性均不尽人意的代码重构为整洁的代码。

内容简介

书中首先介绍C#的编码标准和原则,然后详细讨论代码评审的过程并说明其重要性。接着介绍类、对象与数据结构以及函数式编程的基础知识。之后介绍异常处理、单元测试、端到端系统测试、线程与并发、API的设计与开发、API密钥与API安全、处理切面关注点等C#相关知识。结尾介绍一系列工具来提升代码质量,并介绍重构C#代码的方法。

目录

  • 版权信息
  • 前言
  • 关于作者
  • 关于审校者
  • 第1章 C#的编码标准和原则
  • 1.1 技术要求
  • 1.2 良好的代码与劣质的代码
  • 1.2.1 劣质的代码
  • 1.2.2 良好的代码
  • 1.3 编码标准、原则和方法的必要性
  • 1.3.1 编码标准
  • 1.3.2 编码原则
  • 1.3.3 编码方法
  • 1.3.4 编码规则
  • 1.3.5 模块化
  • 1.3.6 KISS原则
  • 1.3.7 YAGNI原则
  • 1.3.8 DRY原则
  • 1.3.9 SOLID原则
  • 1.3.10 奥卡姆剃刀法则
  • 1.4 总结
  • 1.5 习题
  • 1.6 参考资料
  • 第2章 代码评审
  • 2.1 代码评审流程
  • 2.2 准备代码评审
  • 2.3 引导代码评审
  • 2.3.1 创建pull request
  • 2.3.2 响应pull request
  • 2.3.3 反馈对被评审人的影响
  • 2.4 确定评审内容
  • 2.4.1 公司编码规范与业务需求
  • 2.4.2 命名规则
  • 2.4.3 代码格式
  • 2.4.4 测试
  • 2.4.5 架构规范和设计模式
  • 2.4.6 性能和安全性
  • 2.5 何时发起代码评审
  • 2.6 提供并回应评审反馈
  • 2.6.1 评审人提供反馈意见
  • 2.6.2 被评审人回应反馈
  • 2.7 总结
  • 2.8 习题
  • 2.9 参考资料
  • 第3章 类、对象和数据结构
  • 3.1 技术要求
  • 3.2 组织类
  • 3.3 一个类应当只具备一种职责
  • 3.4 从注释生成文档
  • 3.5 内聚和耦合
  • 3.5.1 紧耦合范例
  • 3.5.2 低耦合范例
  • 3.5.3 低内聚范例
  • 3.5.4 高内聚范例
  • 3.6 为变化而设计
  • 3.6.1 面向接口编程
  • 3.6.2 依赖注入和控制反转
  • 3.6.3 DI范例
  • 3.6.4 IoC范例
  • 3.7 迪米特法则
  • 3.8 不可变对象与数据结构
  • 3.9 对象应当隐藏数据并暴露方法
  • 3.10 数据结构体应当暴露数据而无须包含方法
  • 3.11 总结
  • 3.12 习题
  • 3.13 参考资料
  • 第4章 编写整洁的函数
  • 4.1 理解函数式编程
  • 4.2 保持方法短小
  • 4.3 代码缩进
  • 4.4 避免重复代码
  • 4.5 避免多个参数
  • 4.6 实现单一职责原则
  • 4.7 总结
  • 4.8 习题
  • 4.9 参考资料
  • 第5章 异常处理
  • 5.1 检查型异常和非检查型异常
  • 5.2 避免NullReferenceException
  • 5.3 业务规则异常
  • 5.3.1 范例1——使用业务规则异常进行条件处理
  • 5.3.2 范例2——使用正常程序流程进行条件处理
  • 5.4 异常应当提供有意义的信息
  • 5.5 创建自定义异常
  • 5.6 总结
  • 5.7 习题
  • 5.8 参考资料
  • 第6章 单元测试
  • 6.1 技术要求
  • 6.2 为何要进行良好的测试
  • 6.3 了解测试工具
  • 6.3.1 MSTest
  • 6.3.2 NUnit
  • 6.3.3 Moq
  • 6.3.4 SpecFlow
  • 6.4 TDD方法实践
  • 6.5 删除冗余的测试、注释以及无用代码
  • 6.6 总结
  • 6.7 习题
  • 6.8 参考资料
  • 第7章 端到端系统测试
  • 7.1 端到端测试
  • 7.1.1 登录模块(子系统)
  • 7.1.2 管理员模块(子系统)
  • 7.1.3 测验模块(子系统)
  • 7.1.4 对三模块系统执行E2E测试
  • 7.2 工厂
  • 7.3 依赖注入
  • 7.4 模块化
  • 7.5 总结
  • 7.6 习题
  • 7.7 参考资料
  • 第8章 线程与并发
  • 8.1 理解线程的生命周期
  • 8.2 添加线程参数
  • 8.3 使用线程池
  • 8.3.1 任务并行库
  • 8.3.2 ThreadPool.QueueUserWorkItem()方法
  • 8.4 使用互斥量同步线程
  • 8.5 使用信号量处理并行线程
  • 8.6 限制线程池使用的处理器数目及线程数目
  • 8.7 避免死锁
  • 8.8 避免竞态条件
  • 8.9 理解静态构造器和静态方法
  • 8.9.1 添加静态构造器
  • 8.9.2 在代码中添加静态方法
  • 8.10 可变性、不可变性与线程安全
  • 8.10.1 编写可变且线程不安全的代码
  • 8.10.2 编写不可变且线程安全的代码
  • 8.11 理解线程安全
  • 8.12 同步方法依赖
  • 8.13 使用Interlocked类
  • 8.14 通用建议
  • 8.15 总结
  • 8.16 习题
  • 8.17 参考资料
  • 第9章 API的设计与开发
  • 9.1 技术要求
  • 9.2 什么是API
  • 9.3 API代理
  • 9.4 API设计准则
  • 9.4.1 明确定义软件边界
  • 9.4.2 理解高质量API文档的重要性
  • 9.4.3 传递不可变结构体而非可变对象
  • 9.4.4 测试第三方API
  • 9.4.5 测试自己的API
  • 9.5 使用RAML设计API
  • 9.5.1 安装Atom和MuleSoft的Workbench插件
  • 9.5.2 创建项目
  • 9.5.3 从RAML语言无关设计规范生成C# API代码
  • 9.6 总结
  • 9.7 习题
  • 9.8 参考资料
  • 第10章 使用API密钥和Azure Key Vault保护API
  • 10.1 技术要求
  • 10.2 范例API项目
  • 10.3 访问Morningstar API
  • 10.4 在Azure中创建股息日历ASP.NET Core Web应用程序
  • 10.5 使用API密钥保护股息日历API
  • 10.5.1 创建repository
  • 10.5.2 设置认证和鉴权功能
  • 10.6 测试API密钥安全功能
  • 10.7 添加股息日历代码
  • 10.8 限制API调用
  • 10.9 总结
  • 10.10 习题
  • 10.11 参考资料
  • 第11章 处理切面关注点
  • 11.1 技术要求
  • 11.2 装饰器模式
  • 11.3 代理模式
  • 11.4 使用PostSharp实现AOP
  • 11.4.1 扩展“方面”框架
  • 11.4.2 扩展架构框架
  • 11.5 创建可重用的解决切面关注点问题的类库
  • 11.5.1 添加缓存关注点
  • 11.5.2 添加文件日志功能
  • 11.5.3 添加日志关注点
  • 11.5.4 添加异常处理关注点
  • 11.5.5 添加安全关注点
  • 11.5.6 添加验证关注点
  • 11.5.7 添加事务关注点
  • 11.5.8 添加资源池关注点
  • 11.5.9 添加配置关注点
  • 11.5.10 添加检测关注点
  • 11.6 总结
  • 11.7 习题
  • 11.8 参考资料
  • 第12章 使用工具改善代码质量
  • 12.1 技术要求
  • 12.2 什么是高质量代码
  • 12.3 清理代码并进行代码度量
  • 12.4 执行代码分析
  • 12.5 使用快速操作
  • 12.6 使用JetBrains dotTrace探查工具
  • 12.7 使用JetBrains ReSharper
  • 12.8 使用Telerik JustDecompile工具
  • 12.9 总结
  • 12.10 习题
  • 12.11 参考资料
  • 第13章 重构C#代码——识别代码坏味道
  • 13.1 技术要求
  • 13.2 应用程序级别代码坏味道
  • 13.2.1 布尔盲点
  • 13.2.2 组合爆炸
  • 13.2.3 人为复杂性
  • 13.2.4 数据泥团
  • 13.2.5 粉饰注释
  • 13.2.6 重复代码
  • 13.2.7 意图不明
  • 13.2.8 可变的变量
  • 13.2.9 怪异的解决方案
  • 13.2.10 霰弹式修改
  • 13.2.11 解决方案蔓延
  • 13.2.12 不可控的副作用
  • 13.3 类级别代码坏味道
  • 13.3.1 过高的圈复杂度
  • 13.3.2 发散式变化
  • 13.3.3 向下类型转换
  • 13.3.4 过度的字面量使用
  • 13.3.5 依恋情结
  • 13.3.6 狎昵关系
  • 13.3.7 不恰当的暴露
  • 13.3.8 巨大的类
  • 13.3.9 冗赘类
  • 13.3.10 中间人类
  • 13.3.11 孤立的变量和常量类
  • 13.3.12 基本类型偏执
  • 13.3.13 被拒绝的遗赠
  • 13.3.14 夸夸其谈未来性
  • 13.3.15 命令,而非询问
  • 13.3.16 临时字段
  • 13.4 方法级别的代码坏味道
  • 13.4.1 不合群的方法
  • 13.4.2 过高的圈复杂度
  • 13.4.3 人为复杂性
  • 13.4.4 无用的代码
  • 13.4.5 过多的返回数据
  • 13.4.6 依恋情结
  • 13.4.7 过长或过短的标识符
  • 13.4.8 狎昵关系
  • 13.4.9 过长的代码行
  • 13.4.10 冗赘方法
  • 13.4.11 过长的方法
  • 13.4.12 参数过多
  • 13.4.13 过度耦合的消息链
  • 13.4.14 中间人方法
  • 13.4.15 怪异的解决方案
  • 13.4.16 夸夸其谈未来性
  • 13.5 总结
  • 13.6 习题
  • 13.7 参考资料
  • 第14章 重构C#代码——实现设计模式
  • 14.1 技术要求
  • 14.2 实现创建型设计模式
  • 14.2.1 实现单例设计模式
  • 14.2.2 实现工厂方法设计模式
  • 14.2.3 实现抽象工厂设计模式
  • 14.2.4 实现原型设计模式
  • 14.2.5 实现建造者设计模式
  • 14.3 实现结构型设计模式
  • 14.3.1 实现桥接设计模式
  • 14.3.2 实现组合设计模式
  • 14.3.3 实现外观设计模式
  • 14.3.4 实现享元设计模式
  • 14.4 行为型设计模式概述
  • 14.5 关于整洁代码和重构的思考
  • 14.6 总结
  • 14.7 习题
  • 14.8 参考资料
  • 参考答案
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

机械工业出版社有限公司

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。