Section Ⅰ:Agile Development敏捷开发 1
Chapter 1:Agile Practices敏捷实践 3
The Agile Alliance敏捷联盟 4
Individuals and Interactions over Processes and Tools人和交互重于过程和工具 5
Working Software over Comprehensive Documentation可以工作的软件重于面面俱到的文档 6
Customer Collaboration over Contract Negotiation客户合作重于合同谈判 6
Responding to Change over Following a Plan随时应对变化重于遵循计划 7
Principles原则 8
Conclusion结论 10
Bibliography参考文献 11
Chapter 2:Overview of Extreme Programming极限编程概述 13
The Practices of Extreme Programming极限编程实践 14
Whole Team完整团队 14
User Stories用户故事 14
Short Cycles短交付周期 15
Acceptance Tests验收测试 15
Pair Programming结对编程 16
Test-Driven Development(TDD)测试驱动开发 17
Collective Ownership集体所有权 17
Continuous Integration持续集成 17
Sustainable Pace可持续的开发速度 18
Open Workspace开放的工作空间 18
The Planning Game计划游戏 19
Simple Design简单设计 19
Refactoring重构 20
Metaphor隐喻 21
Conclusion结论 22
Bibliography参考文献 22
Chapter 3:Planning计划 23
Initial Exploration初始探索 24
Spiking,Splitting,and Velocity探究、分解和速度 24
Release Planning发布计划 25
Iteration Planning迭代计划 25
Defining“Done”定义“完成” 26
Task Planning任务计划 26
Iterating迭代 27
Tracking跟踪 28
Conclusion结论 29
Bibliography参考文献 29
Chapter 4:Testing测试 31
Test-Driven Development测试驱动开发 32
Example of Test-First Design测试优先设计的例子 32
Test Isolation测试促使模块之间隔离 33
Serendipitous Decoupling意外获得的解耦合 36
Acceptance Tests验收测试 36
Serendipitous Architecture意外获得的构架 37
Conclusion结论 38
Bibliography参考文献 39
Chapter 5:Refactoring重构 41
A Simple Example of Refactoring:Generating Primes素数产生程序:一个简单的重构示例 42
Unit Testing单元测试 44
Refactoring重构 45
The Final Reread最后审视 49
Conclusion结论 53
Bibliography参考文献 54
Chapter 6:A Programming Episode一次编程实践 55
The Bowling Game保龄球比赛 56
Conclusion结论 98
Overview of the Rules of Bowling保龄球规则概述 99
Section Ⅱ:Agile Design敏捷设计 101
Chapter 7:What Is Agile Design什么是敏捷设计 103
Design Smells设计臭味 104
Design Smells—The Odors of Rotting Software设计坏味——腐化软件的气味 104
Rigidity僵化性 105
Fragility脆弱性 105
Immobility顽固性 105
Viscosity粘滞性 105
Needless Complexity不必要的复杂性 106
Needless Repetition不必要的重复 106
Opacity晦涩性 107
Why Software Rots软件为何会腐化 107
The Copy Program Copy程序 108
A Familiar Scenario熟悉的场景 108
Agile Design of the Copy Program Copy程序的敏捷设计 111
Conclusion结论 113
Bibliography参考文献 114
Chapter 8:The Single-Responsibility Principle(SRP) SRP:单一职责原则 115
Defining a Responsibility定义职责 117
Separating Coupled Responsibilities分离耦合的职责 119
Persistence持久化 119
Conclusion结论 119
Bibliography参考文献 120
Chapter 9:The Open/Closed Principle(OCP) OCP:开放-封闭原则 121
Description of OCP OCP概述 122
The Shape Application Shape应用程序 124
Violating OCP违反OCP 124
Conforming to OCP遵循OCP 127
Anticipation and“Natural”Structure预测变化和“贴切的”结构 128
Putting the“Hooks”In放置吊钩 129
Using Abstraction to Gain Explicit Closure使用抽象获得显式封闭 130
Using a Data-Driven Approach to Achieve Closure使用“数据驱动”的方法获取封闭性 131
Conclusion结论 132
Bibliography参考文献 133
Chapter 10:The Liskov Substitution Principle(LSP) LSP:Liskov替换原则 135
Violations of LSP违反LSP的情形 136
A Simple Example简单例子 136
A More Subtle Violation更微妙的违反情形 138
A Real-World Example实际的例子 143
Factoring Instead of Deriving用提取公共部分的方法代替继承 148
Heuristics and Conventions启发式规则和习惯用法 150
Conclusion结论 151
Bibliography参考文献 151
Chapter 11:The Dependency-Inversion Principle(DIP) DIP:依赖倒置原则 153
Layering层次化 154
Ownership Inversion倒置的接口所有权 155
Dependence on Abstractions依赖于抽象 156
A Simple DIP Example简单的DIP示例 157
Finding the Underlying Abstraction找出潜在的抽象 158
The Furnace Example熔炉示例 160
Conclusion结论 161
Bibliography参考文献 162
Chapter 12:The Interface Segregation Principle(ISP) ISP:接口隔离原则 163
Interface Pollution接口污染 163
Separate Clients Mean Separate Interfaces分离客户就是分离接口 165
Class Interfaces versus Object Interfaces类接口与对象接口 166
Separation Through Delegation使用委托分离接口 167
Separation Through Multiple Inheritance使用多重继承分离接口 168
The ATM User Interface Example ATM用户界面的例子 169
Conclusion结论 174
Bibliography参考文献 175
Chapter 13:Overview of UML for C#Programmers C#程序员UML概观 177
Class Diagrams类图 180
Object Diagrams对象图 182
Sequence Diagrams顺序图 182
Collaboration Diagrams协作图 183
State Diagrams状态图 184
Conclusion结论 185
Bibliography参考文献 185
Chapter 14:Working with Diagrams使用UML 187
Why Model?为什么建模 187
Why Build Models of Software?为什么构建软件模型 188
Should We Build Comprehensive Designs Before Coding?编码前应该构建面面俱到的设计吗 188
Making Effective Use of UML有效使用UML 189
Communicating with Others与他人交流 189
Road Maps脉络图 191
Back-End Documentation项目结束文档 192
What to Keep and What to Throw Away要保留的和要丢弃的 192
Iterative Refinement迭代式改进 194
Behavior First行为优先 194
Check the Structure检查结构 196
Envisioning the Code想象代码 198
Evolution of Diagrams图的演化 199
When and How to Draw Diagrams何时以及如何绘制图示 200
When to Draw Diagrams and When to Stop何时要画图,何时不要画图 200
CASE Tools CASE工具 201
But What About Documentation?那么,文档呢 202
Conclusion结论 202
Chapter 15:State Diagrams状态图 203
The Basics基础知识 204
Special Events特定事件 205
Superstates超状态 206
Initial and Final Pseudostates初始伪状态和结束伪状态 207
Using FSM Diagrams使用FSM图示 208
Conclusion结论 209
Chapter 16:Object Diagrams对象图 211
A Snapshot in Time即时快照 212
Active Objects主动对象 213
Conclusion结论 217
Chapter 17:Use Cases用例 219
Writing Use Cases编写用例 220
Alternate Courses备选流程 221
What Else?其他东西呢 221
Diagramming Use Cases用例图 222
Conclusion结论 223
Bibliography参考文献 223
Chapter 18:Sequence Diagrams顺序图 225
The Basics基础知识 226
Objects,Lifelines,Messages,and Other Odds and Ends对象、生命线、消息及其他 226
Creation and Destruction创建和析构 227
Simple Loops简单循环 228
Cases and Scenarios时机和场合 228
Advanced Concepts高级概念 232
Loops and Conditions循环和条件 232
Messages That Take Time耗费时间的消息 233
Asynchronous Messages异步消息 235
Multiple Threads多线程 239
Active Objects主动对象 240
Sending Messages to Interfaces向接口发送消息 240
Conclusion结论 241
Chapter 19:Class Diagrams类图 243
The Basics基础知识 244
Classes类 244
Association关联 245
Inheritance继承 246
An Example Class Diagram类图示例 247
The Details细节 249
Class Stereotypes类衍型 249
Abstract Classes抽象类 250
Properties属性 251
Aggregation聚集 252
Composition组合 253
Multiplicity多重性 254
Association Stereotypes关联衍型 255
Nested Classes内嵌类 256
Association Classes关联类 256
Association Qualifiers关联修饰符 257
Conclusion结论 258
Bibliography参考文献 258
Chapter 20:Heuristics and Coffee咖啡的启示 259
The Mark IV Special Coffee Maker Mark Ⅳ型专用咖啡机 260
Specification规格说明书 260
A Common but Hideous Solution常见的丑陋方案 263
Imaginary Abstraction虚构的抽象 265
An Improved Solution改进方案 266
Implementing the Abstract Model实现抽象模型 270
The Benefits ofThis Design这个设计的好处 277
OOverkill面向对象过度设计 279
Bibliography参考文献 292
Section Ⅲ:The Payroll Case Study薪水支付案例研究 293
Rudimentary Specification of the Payroll System薪水支付系统的初步规格说明 294
Exercise练习 295
Use Case 1:Add New Employee用例1:增加新雇员 295
Use Case 2:Deleting an Employee用例2:删除雇员 295
Use Case 3:Post a Time Card用例3:登记考勤卡 296
Use Case 4:Posting a Sales Receipt用例4:登记销售凭条 296
Use Case 5:Posting a Union Service Charge用例5:登记工会服务费 296
Use Case 6:Changing Employee Details用例6:更改雇员明细 296
Use Case 7:Run the Payroll for Today用例7:现在运行薪水支付系统 297
Chapter 21:Command and Active Object:Versatility and Multitasking COMMAND模式和ACTIVE OBJECT模式:多功能与多任务 299
Simple Commands简单的Command 300
Transactions事务 302
Physical and Temporal Decoupling实体上解耦和时间上解耦 304
Temporal Decoupling时间上解耦 304
Undo Method Undo()方法 304
Active Object ACTIVE OBJECT模式 305
Conclusion结论 310
Bibliography参考文献 310
Chapter 22:Template Method and Strategy:Inheritance versus Delegation TEMPLATE METHOD模式和STRATEGY模式:继承和委托 311
Template Method TEMPLATE METHOD模式 312
Pattern Abuse滥用模式 315
Bubble Sort冒泡排序 316
Strategy STRATEGY模式 319
Conclusion结论 324
Bibliography参考文献 324
Chapter 23:Facade and Mediator FACADE模式和MEDIATOR模式 325
Facade FACADE模式 325
Mediator MEDIATOR模式 327
Conclusion结论 329
Bibliography参考文献 329
Chapter 24:Singleton and Monostate SINGLETON模式和MONOSTATE模式 331
Singleton SINGLETON模式 332
Benefits SINGLETON模式的好处 334
Costs SINGLETON模式的代价 334
Singleton in Action运用SINGLETON模式 334
Monostate MONOSTATE模式 336
Benefits MONOSTATE模式的好处 337
Costs MONOSTATE模式的代价 338
Monostate in Action运用MONOSTATE模式 338
Conclusion结论 343
Bibliography参考文献 343
Chapter 25:Null Object NULL OBJECT模式 345
Description描述 345
Conclusion结论 348
Bibliography参考文献 348
Chapter 26:The Payroll Case Study:Iteration 1薪水支付案例研究:第一次迭代开始 349
Rudimentary Specification初步的规格说明 350
Analysis by Use Cases基于用例分析 351
Adding Employees增加新雇员 352
Deleting Employees删除雇员 353
Posting Time Cards登记考勤卡 354
Posting Sales Receipts登记销售凭条 354
Posting a Union Service Charge登记工会服务费 355
Changing Employee Details更改雇员明细 356
Payday发薪日 358
Reflection:Finding the Underlying Abstractions反思:找出底层的抽象 360
Employee Payment雇员支付类别抽象 360
Payment Schedule支付时间表抽象 360
Payment Methods支付方式 362
Affiliations从属关系 362
Conclusion结论 363
Bibliography参考文献 363
Chapter 27:The Payroll Case Study:Implementation薪水支付案例研究:实现 365
Transactions事务 366
Adding Employees增加雇员 366
Deleting Employees删除雇员 372
Time Cards,Sales Receipts,and Service Charges考勤卡、销售凭条以及服务费用 373
Changing Employees更改雇员属性 381
What Was I Smoking?犯了什么晕 390
Paying Employees支付雇员薪水 393
Paying Salaried Employees支付领月薪的雇员薪水 396
Paying Hourly Employees支付钟点工薪水 398
Main Program主程序 408
The Database数据库 409
Conclusion结论 411
About This Chapter关于本章 411
Bibliography参考文献 412
Section Ⅳ:Packaging the Payroll System打包薪水支付系统 413
Chapter 28:Principles of Package and Component Design包和组件的设计原则 415
Packages and Components包和组件 416
Principles of Component Cohesion:Granularity组件的内聚性原则:粒度 417
The Reuse/Release Equivalence Principle(REP)重用-发布等价原则 417
The Common Reuse Principle(CRP)共同重用原则 418
The Common Closure Principle(CCP)共同封闭原则 419
Summary of Component Cohesion组件内聚性总结 420
Principles of Component Coupling:Stability组件的耦合性原则:稳定性 420
The Acyclic Dependencies Principle(ADP)无环依赖原则 420
The Stable-Dependencies Principle(SDP)稳定依赖原则 426
The Stable-Abstractions Principle(SAP)稳定抽象原则 431
Conclusion结论 435
Chapter 29:Factory FACTORY模式 437
A Dependency Problem依赖问题 440
Static versus Dynamic Typing静态类型与动态类型 441
Substitutable Factories可替换的工厂 442
Using Factories for Test Fixtures对测试支架使用对象工厂 443
Importance of Factories工厂的重要性 444
Conclusion结论 445
Bibliography参考文献 445
Chapter 30:The Payroll Case Study:Package Analysis薪水支付案例研究:包分析 447
Component Structure and Notation组件结构和符号 448
Applying the Common Closure Principle(CCP)应用CCP 450
Applying the Reuse/Release Equivalence Principle(REP)应用REP 452
Coupling and Encapsulation耦合和封装 454
Metrics度量 455
Applying the Metrics to the Payroll Application度量薪水支付应用程序 457
Object Factories对象工厂 460
Rethinking the Cohesion Boundaries重新思考内聚的边界 461
The Final Packaging Structure最终的包结构 463
Conclusion结论 465
Bibliography参考文献 465
Chapter 31:Composite COMPOSITE模式 467
Composite Commands组合命令 469
Multiplicity or No Multiplicity多重性还是非多重性 470
Conclusion结论 470
Chapter 32:Observer:Evolving into a Pattern OBSERVER——演化至模式 471
The Digital Clock数字时钟 472
The Observer Pattern OBSERVER模式 491
Models模型 491
Management of OOD Principles面向对象设计原则的运用 492
Conclusion结论 493
Bibliography参考文献 494
Chapter 33:Abstract Server,Adapter,and Bridge ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式 495
Abstract Server ABSTRACT SERVER模式 496
Adapter ADAPTER模式 498
The Class Form of Adapter类形式的ADAPTER模式 498
The Modem Problem,Adapters,and LSP调制解调器问题、适配器以及LSP 499
Bridge BRIDGE模式 503
Conclusion结论 505
Bibliography参考文献 506
Chapter 34:Proxy and Gateway:Managing Third-Party APIs PROXY模式和GATEWAY模式:管理第三方API 507
Proxy PROXY模式 508
Implementing Proxy实现PROXY模式 512
Summary小结 525
Databases,Middleware,and Other Third-Party Interfaces数据库、中间件以及其他第三方接口 526
Table Data Gateway TABLE DATA GATEWAY 528
Testing and In-Memory TDGs测试和内存TDG 535
Testing the DB Gateways测试DbGateWay 536
Using Other Patterns with Databases可以用于数据库的其他模式 539
Conclusion结论 541
Bibliography参考文献 541
Chapter 35:Visitor VISITOR模式 543
VISITOR VISITOR模式 544
Acyclic Visitor ACYCLIC VISITOR模式 548
Uses of VISITOR使用VISITOR模式 552
Decorator DECORATOR模式 560
Extension Object EXTENSION OBJECT模式 565
Conclusion结论 576
Bibliography参考文献 577
Chapter 36:State STATE模式 579
Nested Switch/Case Statements嵌套switch/case语句 580
The Internal Scope State Variable内部作用域的状态变量 583
Testing the Actions测试动作 583
Costs and Benefits代价和收益 583
Transition Tables迁移表 584
Using Table Interpretation使用表解释 585
Costs and Benefits代价和收益 586
The State Pattern STATE模式 586
State versus Strategy STATE模式和STRATEGY模式 589
Costs and Benefits代价和收益 590
The State Machine Compiler(SMC)状态机编译器 591
Turnstile.cs Generated by SMC,and Other Support Files SMC生成的Turnstile.cs以及其他支持文件 593
Costs and Benefits代价和收益 598
Classes of State Machine Application状态机应用的场合 598
High-Level Application Policies for GUIs作为GUI中的高层应用策略 599
GUI Interaction Controllers GUI交互控制器 600
Distributed Processing分布式处理 601
Conclusion结论 602
Bibliography参考文献 602
Chapter 37:The Payroll Case Study:The Database薪水支付案例研究:数据库 603
Building the Database构建数据库 604
A Flaw in the Code Design一个代码设计缺陷 605
Adding an Employee增加雇员 607
Transactions事务 618
Loading an Employee加载Employee对象 623
What Remains?还有什么工作 636
Chapter 38:The Payroll User Interface:Model View Presenter薪水支付系统用户界面:Model-View-Presenter 637
The Interface界面 639
Implementation实现 640
Building a Window构建窗口 650
The Payroll Window Payroll窗口 657
The Unveiling真面目 669
Conclusion结论 670
Bibliography参考文献 670
Appendix A:A Satire of Two Companies双公司记 671
Rufus Inc.:Project Kickoff Rufus公司:“日落”项目 671
Rupert Industries:Project Alpha Rupert工业公司:“朝晖”项目 671
Appendix B:What Is Software?什么是软件 687
Index索引 699