目录 1
第0章 导读 1
第1章 一个简单的想法 7
1.1 找寻问题的本质 13
1.2 搜寻解决方法 15
1.2.1 面向对象开发方法 15
1.2.2 测试驱动开发(TDD-Test-Driven Development) 16
1.2.3 结合面向对象分析/面向对象设计和XP/TDD 16
1.3 结论 17
第2章 分析和设计架构的思考 19
2.1 从自然的场景开始构思 20
2.2 PFM系统的设计 22
2.2.1 需求捕获 23
2.2.2 使用需求分析 24
2.2.3 产品设计 27
2.3 类架构的思考 34
2.4 建立开发环境 36
2.4.1 建立版本控制项目 37
2.5 结论 42
第3章 TDD和DUnit框架 45
3.1 取得DUnit For.NET 45
3.2 测试驱动开发模型 46
3.3 使用 DUnit/DUnit For.NET框架 47
3.3.1 范例场景 48
3.3.2 在Delphi项目中使用DUnit.NET 49
3.3.3 使用DUnit.NET框架建立测试用例 50
3.3.4 DUnit.NET框架提供测试服务的函数 59
3.3.5 使用测试包(Test Suite) 61
3.4 Delphi 2005对于TDD的支持 68
3.4.1 建立本章范例项目 69
3.4.2 使用测试用例向导建立测试用例项目 70
3.4.3 使用测试用例向导建立测试用例骨架程序代码 71
3.4.4 在Delphi 2005集成开发环境中执行测试用例 76
3.5 结论 77
第4章 执行引擎和XML驱动设计 79
4.1 设计架构的思考 80
4.2 设定本章开发项目 85
4.3 封装配置信息类设计 89
4.3.1 TPFMConfig类的设计 90
4.3.2 TPFMConfigManager类的设计 91
4.3.3 TPFMSchedule类设计 93
4.3.4 TPFMScheduleManager类设计 93
4.4 从面向对象分析/设计转换到XP/TDD 95
4.4.1 TPFMConfigManager类实现 96
4.4.2 TPFMScheduleManager类实现 100
4.4.3 建立测试用测试设计和实现的类 103
4.5 观察到父类的迹象 111
4.5.1 设计TPFMManager 113
4.5.2 使用TDD测试TPFMManager 117
4.6 改善和重构TPFMManager类 120
4.7 我们学到了什么 127
4.8 开发周期管理 128
4.9 结论 132
第5章 多元,弹性架构的设计和实现-Handlers 135
5.1 设计架构的思考 136
5.2 设定本章开发项目 143
5.3 处理器接口和处理器类的设计和实现 144
5.4 处理器类派生类设计和实现 147
5.4.1 文件处理器类 147
5.4.2 压缩和反压缩处理器类 150
5.4.3 加密和解密处理器类 155
5.4.4 目录处理器类 159
5.5 处理器工厂类设计和实现 162
5.5.1 处理器Factory类 162
5.5.2 测试处理器Factory类 164
5.5.3 进一步改善试处理器Factory类 166
5.5.4 测试处理器Factory类 169
5.5.5 为每一个处理器类建立独立的工厂类 170
5.5.6 测试处理器Factory类 173
5.6 Check In本章的源程序 173
5.7 处理器类和处理器工厂类的改善 174
5.8 结论 175
第6章 搜寻处理目标的设计和实现-Finders 179
6.1 搜寻处理目标类的思考和设计 179
6.2 设定本章开发项目 182
6.3 通用搜寻类-TFinder 184
6.4 目标文件搜寻类-TFileFinder 185
6.5 使用Factory设计模式-TFinderFactory 189
6.6 封装处理目标类-TCandidate 190
6.7 使用TDD测试类设计和实现 191
6.8 程序代码风格的讨论 193
6.8.1 TFinder和TFileFinder类的改善 193
6.9 结论 200
第7章 封装处理目标 203
7.1 设定本章开发环境 205
7.2 TCandidateFactory类 206
7.3 修改TCandidate类 207
7.4 修改客户端程序代码 209
7.5 重新使用TDD测试修改后的TCandidate类 210
7.6 结论 213
第8章 谁执行串联和集成的工作——Coordinator和Task 217
8.1 设计架构的思考 218
8.1.1 类架构设计 221
8.1.2 类互动 224
8.2 建立本章开发项目 225
8.3 类的设计和实现 227
8.3.1 使用Facade设计模式 227
8.3.2 不光是提供Facade功能 229
8.4 工作分派类TPFMTaskDispatcher 230
8.4.1 TPFMTaskDispatcher类的设计和实现 230
8.4.3 修改TPFMManager类 233
8.4.2 修改TPFMCoordinator使用TPFMTaskDispatcher类 233
8.5 以工作指派思想设计PFM需要执行的工作-TPFMTask 236
8.5.1 采用接口设计 236
8.5.2 工作类设计 238
8.5.3 TPFMTask工作类的实现 239
8.5.4 TScheduledTask类的设计和实现 242
8.5.5 TSpecifiedTask类的设计和实现 243
8.6 使用TDD进行测试 243
8.7 TPFMTask的工厂类 248
8.7.1 使用TDD测试TPFMTaskFactory 250
8.8 改善TPFMTaskDispatcher类 252
8.8.1 为TPFMTaskDispatcher加入对象池机制 254
8.8.2 修改TPFMTaskDispatcher 类相关的方法 262
8.8.3 测试用例可以帮助我们进行所有的测试吗 263
8.9 Check In本章源程序 271
8.10 结论 272
第9章 如何永续存储——数据库处理器和Adapter 275
9.1 设计架构的思考 275
9.2 准备本章范例项目 278
9.3 TPFMDBAdapter类 281
9.4 TPFMDBBKAdapter类 282
9.5 修改TDBHandler类 291
9.6 使用TDD测试数据库处理器类 292
9.7 结论 296
第10章 Package和Assembly的设计 299
1O.1 封装架构的思考 300
1O.1.1 如何重新组织Delphi程序单元文件 300
10.2 准备本章范例项目 305
10.3 从最简单的地方开始——例外Assembly 308
10.4 开发PFMSystemConfigurations包 310
10.5 开发PFMSystemCandidate包 311
10.6 开发Finders Assembly 312
10.7 开发处理器Assembly 313
10.8 开发PFM系统核心Assembly 314
10.9 如何确定Assembly能够正确地工作 316
10.10 结论 323
第11章 让我们完工吧,OO和RAD 325
11.1 准备本章的开发环境 325
11.2 如何撰写常驻在Windows工具栏上的.NET程序 327
11.2.1 自定义ApplicationContext对象 329
11.2.2 修改Delphi.NET主程序 332
11.3 如何设定系统时钟触发PFM系统的服务 333
11.4 集成PFM主程序和PFM类 334
11.5 Ready,Set,Go 336
11.6 测试PFM主程序 337
11.7 让PFM主程序更具响应性 339
11.7.1 更准确地显示时间 339
11.7.2 PFM系统工作时改变程序显示的图像 ( 340
11.8 保存PFM系统主程序 341
11.9 结论 341
第12章 回到RAD,图形用户界面和组件 345
12.1 PFM公用程序设计思考 346
12.2 准备本章开发环境 347
12.3 PFM公用主程序 349
12.3.2 PFM公用主程序单元 350
12.3.1 PFM公用程序定义程序单元 350
12.3.3 PFM公用程序辅助类 356
12.4 执行PFM公用程序 361
12.5 保存本章开发结果 365
12.6 结论 366
第13章 撰写高效率的.NET应用程序 369
13.1 影响.NET执行效率的因素 369
13.1.1 虚拟堆栈机器 370
13.1.2 即时编译器(JIT) 372
13.1.3 最优化机器编译器 374
13.1.4 正确使用.NET机制和Framework 377
13.2.1 和垃圾回收器(Garbage Collection)合作 380
13.2 撰写高效率.NET应用程序 380
13.2.2 更好地使用Collection类 385
13.2.3 了解引用对象和数值对象的使用 388
13.2.4 Boxing/Unboxing 393
13.2.5 字符串处理的陷阱 396
13.2.6 小心使用Reflection 398
13.2.7 使用效率监督工具 398
13.3 一些通用的建议 399
13.4 结论 401
第14章 更多的设计和实现,您能继续吗 403
结束语 407