第0章 导读 1
目录 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 从自然的场景开始构思 19
2.2.1 需求捕获 22
2.2 PFM系统的设计 22
2.2.2 使用需求分析 24
2.2.3 产品设计 27
2.3 类架构的思考 34
2.4 建立开发环境 35
2.4.1 建立版本控制项目 36
2.5 结论 43
第3章 TDD和NUnit框架 45
3.1 取得NUnit For.NET 45
3.2 测试驱动开发模型 46
3.3 使用NUnit框架 47
3.3.1 范例场景 48
3.3.2 在C#项目中使用NUnit 49
3.3.3 使用NUnit框架建立测试用例 50
3.3.4 NUnit框架提供测试服务的函数 62
3.3.5 使用测试包(Test Suite) 63
3.3.6 测试种类(Test Category) 68
3.4 结论 74
第4章 执行引擎和XML驱动设计 77
4.1 设计架构的思考 78
4.2 设定本章开发项目 83
4.3 封装配置信息类设计 87
4.3.1 TPFMConfig类的设计 88
4.3.2 TPFMConfigManager类的设计 91
4.3.3 TPFMSchedule类设计 93
4.3.4 TPFMScheduleManager类设计 94
4.4 从面向对象分析/设计转换到XP/TDD 96
4.4.1 TPFMConfigManager类实现 97
4.4.2 TPFMScheduleManager类实现 101
4.4.3 建立测试用例测试设计和实现的类 104
4.5 观察到父类的迹象 111
4.5.1 设计TPFMManager 114
4.5.2 使用TDD测试TPFMManager 119
4.6 改善和重构TPFMManager类 122
4.7 使用Together检查程序代码质量 131
4.8 类使用的设计模式 140
4.9 我们学到了什么 142
4.10 开发周期管理 143
4.11 另外一种开发配置 146
4.12 结论 148
第5章 多元,弹性架构的设计和实现——Handlers 151
5.1 设计架构的思考 152
5.2 设定本章开发项目 159
5.3 处理器接口和处理器类的设计和实现 160
5.4 处理器类派生类设计和实现 163
5.4.1 文件处理器类-TPFMFileHandler 164
5.4.2 压缩和反压缩处理器类-TPFMZipHandler 167
5.4.3 加密和解密处理器类 175
5.4.4 目录处理器类 181
5.4.5 一切都很好,除了 184
5.5 处理器工厂类设计和实现 186
5.5.1 处理器Factory类 186
5.5.2 测试处理器Factory类 189
5.5.3 进一步完善试处理器Factory类 191
5.5.4 测试处理器Factory类 194
5.5.5 为每一个处理器类建立独立的工厂类 195
5.5.6 测试处理器Factory类 198
5.6 对程序代码进行稽核和度量的工作 198
5.6.1 程序代码稽核 198
5.6.2 程序代码度量 199
5.7 Check In本章的源程序 201
5.8 处理器类和处理器工厂类的完善 202
5.9 结论 204
第6章 搜寻处理目标的设计和实现——Finders 207
6.1 搜寻处理目标类的思考和设计 207
6.2 设定本章开发项目 210
6.3 通用搜寻类-TFinder 212
6.4 目标文件搜寻类-TFileFinder 213
6.5 使用Factory设计模式-TFinderFactory 218
6.6 封装处理目标类-TCandidate 219
6.7 使用TDD测试类设计和实现 221
6.8.1 TFinder和TFileFinder类的改善 225
6.8 程序代码风格的讨论 225
6.9 结论 234
第7章 封装处理目标 237
7.1 设定本章开发环境 240
7.2 TCandidateFactory类 240
7.3 修改TCandidate类 242
7.4 修改客户端程序代码 244
7.5 重新使用TDD测试修改后的TCandidate类 246
7.6 结论 251
第8章 谁执行串联和集成的工作——Coordinator和Task 255
8.1 设计架构的思考 256
8.1.1 类架构设计 259
8.1.2 类互动 262
8.2 建立本章开发项目 263
8.3 类的设计和实现 265
8.3.1 使用Fa?ade设计模式 265
8.3.2 不光是提供Fa?ade功能 268
8.4 工作分派类TPFMTaskDispatcher 268
8.4.1 TPFMTaskDispatcher类的设计和实现 269
8.4.2 修改TPFMCoordinator使用TPFMTaskDispatcher类 272
8.4.3 修改TPFMManager类 272
8.5 以工作指派思想设计PFM需要执行的工作-TPFMTask 275
8.5.1 采用接口设计 275
8.5.2 工作类设计 277
8.5.3 TPFMTask工作类的实现 279
8.5.4 TScheduledTask类的设计和实现 281
8.5.5 TSpecifiedTask类的设计和实现 282
8.5.6 完成TPFMTaskDispatcher类 284
8.6 使用TDD进行测试 285
8.7 TPFMTask的工厂类 290
8.7.1 使用TDD测试TPFMTaskFactory 292
8.8 改善TPFMTaskDispatcher类 293
8.8.1 为TPFMTaskDispatcher加入对象池机制 295
8.8.2 修改TPFMTaskDispatcher类相关的方法 304
8.8.3 测试用例可以帮助我们进行所有的测试吗 305
8.9 程序代码稽核和程序代码度量 312
8.9.2 程序代码度量 313
8.9.1 程序代码稽核 313
8.10 Check In本章源程序 319
8.11 结论 320
第9章 如何持久储存——数据库处理器和Adapter 323
9.1 设计架构的思考 323
9.2 准备本章范例项目 326
9.3 TPFMDBAdapter类 328
9.4 TPFMDBBKAdapter类 329
9.5 修改TPFMDBHandler类 338
9.6 使用TDD测试数据库处理器类 339
9.7.1 程序代码稽核 343
9.7 程序代码稽核和程序代码度量 343
9.7.2 程序代码度量 345
9.8 结论 346
第10章 PFM系统和Assembly的设计 349
10.1 封装架构的思考 349
10.1.1 如何重新组织C#类文件 350
10.2 准备本章范例项目 356
10.3 从最简单的地方开始-PFMSystemExceptions包 357
10.4 开发PFMSystemGlobals包 358
10.5 开发PFMSystemConfigurations包 359
10.6 开发PFMSystemCandidate包 361
10.7 开发Finders Assembly 362
10.8 开发处理器Assembly 364
10.9 开发PFM系统核心Assembly 365
10.10 如何确定Assembly能够正确工作 367
10.11 结论 373
第11章 让我们完工吧,OO和RAD 375
11.1 准备本章的开发环境 375
11.2 如何撰写常驻在Windows工具栏上的.NET程序 377
11.2.1 自定义ApplicationContext对象 379
11.2.2 修改C#Windows Form主程序 383
11.3 如何设定系统时钟触发PFM系统的服务 384
11.4 集成PFM主程序和PFM类 385
11.5 Ready,Set,Go 387
11.6 测试PFM主程序 388
11.7 让PFM主程序更具响应性 390
11.7.1 更准确的显示时间 390
11.7.2 PFM系统工作时改变程序显示的图像 391
11.7.3 加入执行指定工作的服务 392
11.8 保存PFM系统主程序 394
11.9 结论 394
第12章 回到RAD,图形用户界面和组件 397
12.1 PFM公用程序设计思考 398
12.2 准备本章开发环境 399
12.3 PFM公用主程序 402
12.3.1 PFM公用程序定义程序单元 403
12.3.2 PFM公用主程序单元 404
12.3.3 PFM公用程序辅助类 411
12.4 执行PFM公用程序 415
12.5 保存本章开发结果 420
12.6 结论 420
第13章 撰写高效率的.NET应用程序 423
13.1 影响.NET执行效率的因素 423
13.1.1 虚拟堆栈机器 424
13.1.2 即时编译器(JIT) 426
13.1.3 最优化机器编译器 428
13.1.4 正确使用.NET机制和Framework 430
13.2 撰写高效率.NET应用程序 433
13.2.1 和垃圾回收器(Garbage Collection)协作 434
13.2.2 更好地使用Collection类 438
13.2.3 了解引用对象和值对象的使用 441
13.2.4 Boxing/Unboxing 446
13.2.5 字符串处理的陷阱 449
13.2.6 小心使用Reflection 450
13.2.7 使用效率监督工具 451
13.3 一些通用的建议 452
13.4 C#和设计模式的执行效率 455
13.4.1 Command设计模式 455
13.4.2 FlyWeight设计模式 459
13.5 结论 463
第14章 更多的设计和实现,您能继续吗 465