评分
☆☆☆☆☆
整本书包含的内容有限,算是Uncle Bob的那本«敏捷软件开发»的简化版吧。里面的部分内容也稍稍有点过时,有些模式现在已经更推崇用FP的方式去替代了。
评分
☆☆☆☆☆
整本书包含的内容有限,算是Uncle Bob的那本«敏捷软件开发»的简化版吧。里面的部分内容也稍稍有点过时,有些模式现在已经更推崇用FP的方式去替代了。
评分
☆☆☆☆☆
整本书包含的内容有限,算是Uncle Bob的那本«敏捷软件开发»的简化版吧。里面的部分内容也稍稍有点过时,有些模式现在已经更推崇用FP的方式去替代了。
评分
☆☆☆☆☆
不错的C#编程书。中文书名翻译的略显怪异,搞个好像敏捷方法论或者项目管理类的书籍似的,其实是一本很偏编码的书籍,运用设计模式和solid来编码,和敏捷关系不是很大。
评分
☆☆☆☆☆
这是一本相当不错的书,适合有两三年开发经验的人读。
第一部分 敏捷基础
第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 总结 143
第二部分 编写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
· · · · · · (
收起)