第1篇 设计之要 2
第1章 设计之道 2
1.1 计划的设计与演进的设计 2
1.2 架构的标准 4
1.3 过度设计,还是简单设计 7
1.4 需要设计模式吗 9
1.5 重构是必然的 10
1.6 UML重要吗 11
1.7 测试驱动开发 12
第2章 对象法则 14
2.1 面向对象思想 14
2.2 面向对象核心要素 15
2.2.1 封装 15
2.2.2 继承 18
2.2.3 多态 21
2.3 面向对象设计原则 23
2.3.1 单一职责原则 23
2.3.2 开放封闭原则 27
2.3.3 Liskov替换原则 29
2.3.4 依赖倒置原则 30
2.3.5 接口隔离原则 32
第3章 封装变化 35
3.1 设计模式之鹄的 35
3.2 如何封装变化 37
3.2.1 封装对象行为的变化 37
3.2.2 封装对象创建的变化 40
3.2.3 封装对象结构的变化 44
3.3 解耦具体依赖 47
3.3.1 配置文件与反射技术 49
3.3.2 表驱动法 51
3.3.3 惯例优于配置 53
3.3.4 依赖注入 53
第4章 体验重构 56
4.1 一个阶乘容器 57
4.2 代码的坏味道 58
4.3 需求发生变化 59
4.4 运用重构利器 61
4.5 引入设计模式 64
第5章 测试驱动开发 67
5.1 发现价值与生产价值 68
5.2 运用面向对象编程思想 72
5.3 适时小结 77
5.4 收获价值 77
5.5 无上之力 78
第2篇 .NET框架与设计模式第6章 .NET中的工厂方法模式 82
6.1 “嫁祸江东”之计 82
6.2 WebRequest对象的创建 89
6.3 改造工厂方法模式 91
6.4 实现良好的可扩展性 98
6.5 惯例优于配置 100
第7章 .NET中的合成模式 102
7.1 字处理软件 102
7.2 .NET框架中的控件 109
7.3 “复合方式”的合成模式 113
第8章 .NET中的装饰器模式 123
8.1 一步一步走向装饰器模式 123
8.2 .NET框架中对流的处理 133
第9章 .NET中的迭代器模式 138
9.1 分辨对象的职责 138
9.2 实现迭代器模式 139
9.3 迭代器模式大观园 144
9.4 迭代器模式在.NET框架中的实现 146
9.5 通过yield return实现迭代器 149
9.6 C#3.0对迭代器模式的支持 153
第10章 .NET中的策略模式 156
10.1 税务系统 156
10.2 利用委托实现策略模式 158
10.3 .NET框架中的Provider对象 161
第11章 .NET中的命令模式 166
11.1 考勤管理系统 166
11.2 命令模式在WF中的运用 169
11.3 合成模式与命令模式的结合 172
第3篇 媒体播放器的设计之旅第12章 面向对象与接口分离 178
12.1 拙劣的设计 178
12.2 面向对象设计 180
12.3 接口分离 185
12.4 解除具体依赖 190
第13章 接口行为的适配 195
13.1 新的应用场景 195
13.2 “狼”与“羊”的关系 196
13.3 引入适配器模式 200
13.3.1 类的适配器模式 201
13.3.2 对象的适配器模式 203
13.4 适配器模式比较 206
第14章 接口行为的扩展 207
14.1 设计走向死胡同 207
14.2 考察适配器模式 208
14.3 引入访问者模式 211
14.4 非循环访问者模式 213
14.5 合理运用访问者模式 217
第15章 接口行为的装饰 219
15.1 不断变化的需求 219
15.2 考虑代理模式 221
15.3 引入装饰器模式 224
第4篇 设计模式应用实践 228
第16章 抽象工厂模式应用 228
16.1 报表组件 228
16.2 糟糕的设计 229
16.3 引入抽象工厂模式 231
16.4 工厂对象的使用 234
16.5 引入策略模式和桥接模式 236
16.6 适配器模式扩展抽象工厂结构 238
16.7 接口还是抽象类 239
第17章 建造者模式应用 243
17.1 装配设备对象 243
17.2 糟糕的设计 246
17.3 引入建造者模式 249
17.4 从容应对扩展 253
第18章 命令模式应用 255
18.1 安装向导 255
18.2 糟糕的设计 256
18.3 引入命令模式 259
18.4 进一步完善 261
18.5 分辨对象职责与变化 268
第19章 职责链模式应用 271
19.1 员工培训系统 271
19.2 设计模型 273
19.3 设计的重构 278
19.4 职责链模式 280
第20章 观察者模式应用 286
20.1 监控设备状态 287
20.2 引入观察者模式 288
20.3 事件与委托改进观察者模式 292
第21章 代理模式应用 297
21.1 显示设备控件 297
21.2 引入代理模式 298
21.3 完善设计 305
第22章 设计模式综合应用 310
22.1 话单转换工具 310
22.2 糟糕的设计 311
22.3 面向对象的设计思想 313
22.4 引入策略模式 314
22.5 需求发生变化 318
22.6 引入模板方法模式 318
22.7 合理的设计才是最好的设计 321
22.8 引入桥接模式 322
22.9 分离接口 330
22.10 引入抽象工厂模式 334
第5篇 .NET体系架构 342
第23章 软件体系架构 342
23.1 分层架构模式 343
23.2 分层架构模式之优劣 345
23.3 PetShop的架构版本演化 346
23.4 PetShop 4.0的系统架构 349
第24章 数据访问层 355
24.1 数据库样式 355
24.2 数据对象 357
24.3 SQL语句之瘤 362
24.4 运用ORM的思想 363
24.5 资源库模式与工作单元模式 367
24.6 事务的处理 369
24.7 具有简单工厂特质的抽象工厂模式 372
24.8 服务定位器模式 374
第25章 消息处理 376
25.1 MSMQ的实现 376
25.1.1 消息处理模块的组成 376
25.1.2 消息接口 377
25.1.3 消息接口的实现 377
25.1.4 消息工厂 380
25.1.5 后台处理应用程序 382
25.1.6 引入策略模式 384
25.2 分布式处理 385
第26章 ASPNET缓存 387
26.1 ASP.NET缓存概述 387
26.2 SqlCacheDependency特性 390
26.2.1 利用aspnet_regsql工具 390
26.2.2 利用SqlCacheDependencyAdmin类 393
26.3 ASP.NET缓存在PetShop 4.0中的实现 394
26.3.1 CacheDependency接口 394
26.3.2 CacheDependency实现 395
26.3.3 CacheDependency工厂 396
26.3.4 引入门面模式 398
26.3.5 引入代理模式 401
第27章 业务逻辑层 405
27.1 与领域专家合作 405
27.2 业务逻辑层的模式应用 408
27.3 PetShop的业务逻辑层 409
27.4 与数据访问层的通信 413
27.5 面向接口设计 415
第28章 表现层 419
28.1 页面控制器模式 419
28.2 用户管理 422
28.2.1 Profile特性 423
28.2.2 Membership特性 427
28.3 ASP.NET控件 434
28.3.1 自定义控件 436
28.3.2 用户控件 440
28.3.3 登录控件 441
28.3.4 Master Page 442
28.4 MVC模式 444
28.5 表现层的演变 448
参考文献 449