编辑推荐
用户的需求经常变化,每个开发者都深受其害。不过,如果能够提高代码的自适应性,就能更加轻松地响应变化,避免重复劳动。本书介绍了敏捷编程的best practice、原则和模式,能让你编写出灵活的自适应性代码,从而创造更大的商业价值。
专家指导,帮你跨越理论和实践之间的鸿沟
- 熟练运用Scrum:工件、角色、度量标准、阶段
- 组织和管理架构的依赖关系
- 回顾各种模式、反模式以及best practice
- 掌握SOLID原则
- 管理自适应代码的各种接口应用方式
- 先后进行单元测试和重构
- 观察委托和抽象如何影响代码自适应性
- 学习实现依赖注入的推荐方式
- 将学到的知识应用于敏捷开发的实际项目
内容简介
本书共分为敏捷基础、编写SOLID代码和自适应实例三大部分,将理论与实践相结合,介绍了当前使用Microsoft .NET Framework进行C#编程的杰出实践,详尽探讨了C#开发人员如何应用Scrum等敏捷方案实现高质量、自适应的代码,并给出大量代码示例,是.NET中高级程序员进阶的实用指南。
作者简介
Gary McLean Hall
Microsoft .NET Framework开发大师,特别擅长设计模式和业内的杰出实践。多年来,他参加过很多致力于创造自适应代码的敏捷团队,为诸如Eidos、Xerox、Nephila Capital和LateRooms Group等公司工作过。近几年,他在运营自己的软件顾问公司。在每个工作岗位上,他都能够非常出色地做到:在按时交付软件产品的同时保证产品源代码的高质量。
许顺强
本科和硕士毕业于南京航空航天大学机电学院航空宇航制造工程专业,2006年毕业后任教于西安空军工程大学飞行器动力工程系,两年后加入联想深圳研发实验室从事ThinkPad系列软件研发工作至今。工作方面的主要兴趣点有设备互联和网络传输等软件技术领域,以及Scrum和XP等敏捷软件开发过程。推崇易懂易测、整洁优美的软件代码。
目录
第一部分 敏捷基础
第1章 Scrum介绍 3
1.1 Scrum与瀑布 4
1.2 角色和职责 6
1.2.1 产品负责人 7
1.2.2 Scrum主管 7
1.2.3 开发团队 8
1.2.4 “猪”和“鸡” 8
1.3 工件 9
1.3.1 Scrum面板 9
1.3.2 图表和度量标准 20
1.3.3 积压工作 24
1.4 冲刺 25
1.4.1 发布计划会议 26
1.4.2 冲刺计划会议 26
1.4.3 每日站立会议 28
1.4.4 冲刺演示会议 29
1.4.5 冲刺回顾会议 30
1.4.6 Scrum日历 31
1.5 Scrum和敏捷的问题 32
1.6 总结 36
第2章 依赖和分层 37
2.1 依赖的定义 38
2.1.1 一个简单的例子 38
2.1.2 使用有向图对依赖建模 44
2.2 依赖管理 48
2.2.1 实现与接口 48
2.2.2 new代码味道 49
2.2.3 对象构造的替代方法 52
2.2.4 随从反模式 54
2.2.5 阶梯模式 56
2.2.6 依赖解析 57
2.2.7 使用NuGet管理依赖 67
2.3 分层 70
2.3.1 常见的模式 71
2.3.2 纵切关注点 76
2.3.3 非对称分层 77
2.4 总结 79
第3章 接口和设计模式 80
3.1 接口是什么 80
3.1.1 语法 80
3.1.2 显式实现 83
3.1.3 多态 87
3.2 自适应设计模式 88
3.2.1 空对象模式 88
3.2.2 适配器模式 94
3.2.3 策略模式 96
3.3 更多形式 98
3.3.1 鸭子类型 98
3.3.2 混合类型 102
3.3.3 流接口 106
3.4 总结 108
第4章 单元测试和重构 109
4.1 单元测试 109
4.1.1 布置、动作和断言 110
4.1.2 测试驱动开发 113
4.1.3 更复杂的测试 118
4.2 重构 131
4.2.1 更改已有代码 131
4.2.2 一个新的账户类型 139
4.3 总结 144
第二部分 编写SOLID代码
第5 章 单一职责原则 147
5.1 问题描述 147
5.1.1 重构清晰度 150
5.1.2 重构抽象 153
5.2 单一职责原则和修饰器模式 160
5.2.1 复合模式 162
5.2.2 谓词修饰器 165
5.2.3 分支修饰器 168
5.2.4 延迟修饰器 169
5.2.5 日志记录修饰器 170
5.2.6 性能修饰器 172
5.2.7 异步修饰器 175
5.2.8 修饰属性和事件 177
5.3 用策略模式替代switch语句 178
5.4 总结 180
第6章 开放与封闭原则 181
6.1 开放与封闭原则介绍 181
6.1.1 Meyer的定义 181
6.1.2 Martin的定义 181
6.1.3 缺陷修复 182
6.1.4 客户端感知 182
6.2 扩展点 183
6.2.1 没有扩展点的代码 183
6.2.2 虚方法 184
6.2.3 抽象方法 184
6.2.4 接口继承 185
6.2.5 “为继承设计或禁止继承” 186
6.3 防止变异 186
6.3.1 可预见的变化 187
6.3.2 一个稳定的接口 187
6.3.3 足够的自适应能力 187
6.4 总结 188
第7章 Liskov替换原则 189
7.1 Liskov替换原则介绍 189
7.1.1 正式定义 189
7.1.2 Liskov替换原则的规则 190
7.2 契约 190
7.2.1 前置条件 192
7.2.2 后置条件 193
7.2.3 数据不变式 194
7.2.4 Liskov契约规则 195
7.2.5 代码契约 201
7.3 协变和逆变 208
7.3.1 定义 208
7.3.2 Liskov类型系统规则 213
7.4 总结 216
第8章 接口分离原则 217
8.1 一个分离接口的示例 217
8.1.1 一个简单的CRUD接口 217
8.1.2 缓存 223
8.1.3 多重接口修饰 226
8.2 客户端构建 228
8.2.1 多实现、多实例 229
8.2.2 单实现、单实例 231
8.2.3 超级接口反模式 232
8.3 接口分离 233
8.3.1 客户端需要 233
8.3.2 架构需要 239
8.3.3 单方法接口 243
8.4 总结 244
第9章 依赖注入原则 245
9.1 简单的开始 245
9.1.1 任务列表应用 248
9.1.2 对象图的构建 250
9.1.3 控制反转 254
9.2 比较复杂的注入 267
9.2.1 服务定位器反模式 267
9.2.2 非法注入 270
9.2.3 组合根 272
9.2.4 约定优于配置 277
9.3 总结 280
第三部分 自适应实例
第10章 自适应实例简介 284
10.1 Trey Research公司 284
10.1.1 团队 284
10.1.2 产品 286
10.2 最初的产品积压工作 287
10.2.1 从描述中挖掘故事 287
10.2.2 故事点估算 288
10.3 总结 292
第11章 自适应实例冲刺1 293
11.1 计划会议 293
11.2 “我想创建多个房间以对会话进行分类” 295
11.2.1 控制器 295
11.2.2 房间存储库 299
11.3 “我想查看代表会话的房间的列表” 303
11.4 “我想查看发送到一个房间内的消息” 307
11.5 “我想给房间内的其他成员发送纯文本消息” 309
11.6 演示会议 311
11.7 回顾会议 311
11.7.1 什么做得比较好 312
11.7.2 什么做得不太好 312
11.7.3 什么需要改变 313
11.7.4 什么需要保持 314
11.7.5 遇到了什么意料之外的事情 314
11.8 总结 315
第12章 自适应实例冲刺2 316
12.1 计划会议 316
12.2 “我想发送正确格式化的标记” 317
12.3 “我想过滤消息内容以确保它是适合发表的” 321
12.4 “我想同时服务数百个用户” 323
12.5 演示会议 325
12.6 回顾会议 326
12.6.1 什么做得比较好 326
12.6.2 什么做得不太好 327
12.6.3 什么需要改变 327
12.6.4 什么需要保持 327
12.6.5 遇到了什么意料之外的事情 327
12.7 总结 328
附录 自适应工具 329
前言/序言
C#敏捷开发实践 电子书 下载 mobi epub pdf txt