第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 (177)
6.1 搜寻处理目标类的思考和设计 (177)
6.2 设定本章开发项目 (180)
6.3 通用搜寻类-TFinder (182)
6.4 目标文件搜寻类-TFileFinder (183)
6.5 使用Factory设计模式-TFinderFactory (187)
6.6 封装处理目标类-TCandidate (188)
6.7 使用TDD测试类设计和实现 (189)
6.8 程序代码风格的讨论 (191)
6.8.1 TFinder和TFileFinder类的改善 (191)
6.9 结论 (198)
第7章 封装处理目标 (199)
7.1 设定本章开发环境 (201)
7.2 TCandidateFactory类 (202)
7.3 修改TCandidate类 (203)
7.4 修改客户端程序代码 (205)
7.5 重新使用TDD测试修改后的TCandidate类 (206)
7.6 结论 (209)
第8章 谁执行串联和集成的工作? Coordinator和Task (211)
8.1 设计架构的思考 (212)
8.1.1 类架构设计 (215)
8.1.2 类互动 (218)
8.2 建立本章开发项目 (219)
8.3 类的设计和实现 (221)
8.3.1 使用Façade设计模式 (221)
8.3.2 不光是提供Façade功能 (223)
8.4 工作分派类TPFMTaskDispatcher (224)
8.4.1 TPFMTaskDispatcher类的设计和实现 (224)
8.4.2 修改TPFMCoordinator使用TPFMTaskDispatcher类 (227)
8.4.3 修改TPFMManager类 (227)
8.5 以工作指派思想设计PFM需要执行的工作-TPFMTask (230)
8.5.1 采用接口设计 (230)
8.5.2 工作类设计 (232)
8.5.3 TPFMTask工作类的实现 (233)
8.5.4 TScheduledTask类的设计和实现 (236)
8.5.5 TSpecifiedTask类的设计和实现 (237)
8.6 使用TDD进行测试 (237)
8.7 TPFMTask的工厂类 (242)
8.7.1 使用TDD测试TPFMTaskFactory (244)
8.8 改善TPFMTaskDispatcher类 (246)
8.8.1 为TPFMTaskDispatcher加入对象池机制 (248)
8.8.2 修改TPFMTaskDispatcher类相关的方法 (256)
8.8.3 测试用例可以帮助我们进行所有的测试吗 (257)
8.9 Check In本章源程序 (265)
8.10 结论 (266)
第9章 如何永续存储?数据库处理者和Adapter (269)
9.1 设计架构的思考 (269)
9.2 准备本章范例项目 (272)
9.3 TPFMDBAdapter类 (275)
9.4 TPFMDBBKAdapter类 (276)
9.5 修改TDBHandler类 (285)
9.6 使用TDD测试数据库处理者类 (286)
9.7 结论 (290)
第10章 Package和Assembly的设计 (293)
10.1 封装架构的思考 (294)
10.1.1 如何重新组织Delphi程序单元文件 (294)
10.2 准备本章范例项目 (299)
10.3 从最简单的地方开始——例外Assembly (302)
10.4 开发PFMSystemConfigurations包 (304)
10..5 开发PFMSystemCandidate 包 (305)
10.6 开发Finders Assembly (306)
10.7 开发处理者Assembly (307)
10.8 开发PFM系统核心Assembly (308)
10.9 如何确定Assembly能够正确地工作 (310)
10.9 结论 (317)
第11章 让我们完工吧,OO和RAD (319)
11.1 准备本章的开发环境 (319)
11.2 如何撰写常驻在Windows工具栏上的.NET程序 (321)
11.2.1 自定义ApplicationContext对象 (323)
11.2.2 修改Delphi.NET主程序 (326)
11.3 如何设定系统时钟触发PFM系统的服务 (327)
11.4 集成PFM主程序和PFM类 (328)
11.5 Ready,Set,Go (330)
11.6 测试PFM主程序 (331)
11.7 让PFM主程序更具响应性 (333)
11.7.1 更准确地显示时间 (333)
11.7.2 PFM系统工作时改变程序显示的图像 (334)
11.8 保存PFM系统主程序 (335)
11.9 结论 (335)
第12章 回到RAD,图形用户界面和组件 (337)
12.1 PFM公用程序设计思考 (338)
12.2 准备本章开发环境 (339)
12.3 PFM公用主程序 (341)
12.3.1 PFM公用程序定义程序单元 (342)
12.3.2 PFM公用主程序单元 (342)
12.3.3 PFM公用程序辅助类 (348)
12.4 执行PFM公用程序 (353)
12.5 保存本章开发结果 (357)
12.6 结论 (358)
第13章 撰写高效率的.NET应用程序 (359)
13.1 影响.NET执行效率的因素 (359)
13.1.1 虚拟堆栈机器 (360)
13.1.2 即时编译器(JIT) (362)
13.1.3 最优化机器编译器 (364)
13.1.4 正确使用.NET机制和Framework (367)
13.2 撰写高效率.NET应用程序 (370)
13.2.1 和垃圾回收器(Garbage Collection)协作 (370)
13.2.2 更好地使用Collection类 (375)
13.2.3 了解引用对象和数值对象的使用 (378)
13.2.4 Boxing/Unboxing (383)
13.2.5 字符串处理的陷阱 (386)
13.2.6 小心使用Reflection (388)
13.2.7 使用效率监督工具 (388)
13.3 一些通用的建议 (389)
13.4 结论 (391)
第14章 更多的设计和实现,您能继续吗 (393)
结束语 (397)