monostate 状态_敏捷软件开发:原则、模式与实践(英文注释版)

Section 1 Agile Development敏捷开发    1

Chaper1 Agile Practices敏捷实践    3

The Agile Alliance敏捷联盟    4

The Manifesto of the Agile Alliance敏捷联盟宣言    4

Principles敏捷原则    6

Conclusion结论    8

Bibliography参考文献    9

Chaper2 Overview of Extreme Programming极限编程概述    11

The Practices ofExtreme Programming极限编程的实践    11

Customer Team Member客户团队成员    11

User Stories用户故事    12

Short Cycles短交付周期    12

Acceptance Tests验收测试    13

Pair Programming结队编程    13

Test Driven Development测试驱动开发    14

Collective Ownership集体昕有权    14

Continuous Integration持续集成    14

Sustainable Pace可持续的开发速度    15

Open Workspace开放工作空间    15

The Planning Game计划游戏    15

Simple Design简单设计    15

Refactoring重构    16

Metaphor隐喻    16

Conclusion结论    17

Bibliography参考文献    17

Chapter3 Planning计划    19

Initial Exploration初始探索    20

Spiking,Splitting,and Velocity探究、分解和速度    20

Release Planning发布计划    20

Iteration Planning迭代计划    21

Task Planning任务计划    21

The Halfway Point迭代中点    22

Iterating迭代    22

Conclusion结论    22

Bibliography参考文献    22

Chapter4 Testing测试    23

Test Driven Development测试驱动开发    23

An Example of Test-First Design测试优先设计的例子    24

Test Isolation测试促进隔离    25

Serendipitous Decoupling意外获得的解耦合    26

Acceptance Tests验收测试    27

Example of Acceptance Testing验收测试示例    27

Serendipitous Architecture意外获得的架构    29

Conclusion  结论    29

Bibliography参考文献    29

Chapter5  Refactoring重构    31

Generating Primes:A Simple Example of Refactoring素数产生程序:一个简单的重构示例    32

The Final Reread最后审视    38

Conclusion结论42

Bibliography参考文献    42

Chapter6 A Programming Episode一次编程实践43

The Bowling Game保龄球比赛    44

Conclusion结论    82

Section 2  Agile Design敏捷设计    85

Symptoms of Poor Design糟糕设计的症状    85

Principles原则        86

Smells and Principles坏味与原则    86

Bibliography参考文献    86

Chapter 7  What Is Agile Design?什么是敏捷设计    87

What Goes Wrong with Software?软件哪里出问题了    87

Design Smells--The Odors of Rotting Software设计坏味--腐化软件的气味    88

What Stimulates the Software to Rot?软件为何腐化    89

Agile Teams Don’t Allow the Software to Rot敏捷团队不允许软件腐化    90

The“Copy”Program copy程序    90

Agi-l:Desig-n of the c。py Example copy~序的敏捷设计    93

How Did the Agile Developers Know what to Do?敏捷开发人员怎样做    94

Keeping the Design As Good As It Can Be尽量保持设计简洁    94

Conclusion结论    94

Bibliography参考文献    94

Chapter 8  SRP:The Single-Responsibility Principle SRP:单一职责原则    95

A CLASS SIIOUI HAVE 0NLY 0NE REASON TO CHANGE.

SRP:The Single-Responsibility Principle SRP:单一职责原则    95

What Is a Responsibility?定义职责    97

Separating Coupled Responsibilities分离耦合的职责    97

Persistence持久化    98

Conclusion结论    98

Bibliography参考文献    98

Chapter 9  OCP:The Open-Closed Principle OCP:开放一封闭原则    99

SOFTWARE ENTITIES(CLASSES,MODULES,FUNCTI0NS,ETC.) SHOULD BE OPEN

FOR EXTENSION,BUT CLOSED FOR MODIFICATI0N.

OCP:The Open-Closed Principle OCP:开放封闭原则    99

Description概述    100

Abstraction Is the Key抽象是关键    100

The Shape Application Shape应用程序    l0l

Violating the OCP  违反OCP    101

Conforming to the OCP遵守OCP    103

OK,I Lied好吧,我说谎了    104

Anticipation and“Natural-Structure预测与“贴切的”结构    105

Putting the“Hooks-In放置“吊钩”    1 05

Using Abstraction to Gain Explicit Closure使用抽象获得显式封闭    106

Using a“Data-Driven”Approach to Achieve Closure使用“数据驱动”获得封闭    107

Conclusion结论    l08

Bibliography参考文献    109

Chapter 10 LSP:The Liskov Substitution Principle LSP:Liskov替换原则    111

SUBTYPES MUST BE SUBSTTUTABLE FOR THEIR BASE TYPES.

LSP:The Liskov Substitution Principle LSP:Liskov替换原则    111

A Simple Example of a Violation of the LSP违反LSP的简单例子    112

Square and Rectangle,a More Subtle Violation正方形和矩形,一个更微妙的违反情形    113

The Real Problem真正的问题所在    l15

Validity Is Not Intrinsic有效性并非本质属性    l16

ISA Is about Behavior ISA重在行为    l16

Design by Contract按契约设计    l17

Specifying Contracts in Unit Tests在单元测试中指定契约    117

A Real Example一个实例    l17

Motivation动机    118

Problem问题    119

A Solution That Does Not Conform to the LSP不遵守LSP的解决方案    l20

An LSP-Compliant Solution遵守LSP的解决方案    l20

Factoring Instead of Deriving用提取公共部分的方法代替继承    12l

Heuristics and Conventions启发式规则号惯用法    124

Degenerate Functions in Derivatives派生类中的退化函数    124

Throwing Exceptions from Derivatives从派生类抛出异常    124

Conclusion结论    l25

Bibliography参考文献    125

Chapter11 DIP:The Dependency-Inversion Principle DIP:依赖倒置原则    127

A.HIGH-LEVEL MODULES SHOULD NOT DEPEND UPON LOW-LEVEL MODULES.

BOTH SHOULD DEPEND ON ABSTRACTIONS.

B.ABSTRACTIONS SHOULD NOTDEPEND ONDETAILS.DETAILS SHOULD

DEPEND ON ABSTRACTIONS.

DIP:The Dependency-Inversion Principle DIP:依赖倒置原则    127

Layering层次化    128

An Inversion of Ownership倒置的接口所有权    128

Depend on Abstractions依赖于抽象    129

A Simple Example简单的DIP示例    130

Finding the Underlying Abstraction找出潜在的抽象    131

The Furnace Example熔炉示例    132

Dynamic V.Static Polymorphism动态多态与静态多态    133

Conclusion结论    134

Bibliography参考文献    134

Chapter 12 ISP:The Interface-Segregation Principle ISP:接口隔离原则    135

Interface Pollution接口污染    135

Separate Clients Mean Separate Interfaces分离客户就是分离接口    137

The Backwards Force Applied by Clients Upon Interfaces客户对接口的反作用力    137

CLIENTS SHOULD NOT BE FORCED TO DEPEND ON METHODS THAT THEY DO NOT USE.

ISP:The Interface-Segregation Principle ISP:接口隔离原则    137

Class Interfaces v.0bject Interfaces类接口与对象接口    138

Separation through Delegation使用委托分离接口    138

Separation through Multiple Inheritance使用多重继承分离接口    139

The ATM User Interface Example ATM用户界面的例子    139

The Polyad v.the Monad多参数与单参数    144

Conclusion结论    145

Bibliography参考文献    145

Section 3 The Payroll Case Study薪酬系统案例研究    147

Rudimentaxy Specification of the Payroll System薪酬系统的初步规格说明    148

Exercise练习    148

Use Case 1:Add New Employee用例1:增加新雇员    148

Use Case 2:Deleting an Employee用例2:删除雇员    149

Use Case 3:Post a Time Card用例3:登记考勤卡    149

Use Case 4:Posting a Sales Receipt用例4:登记销售凭条    149

Use Case 5:Posting a Union Service Charge用例5:登记工会会费    150

Use Case 6:Changing Employee Details用例6:更改雇员明细    150

Use Case 7:Run the Payroll for Today用例7:运行系统,今天付酬    150

Chapter13 COMMAND and ACTIVE 0BJECT COMMAND模式与ACTIVE OBJECT模式    151

Simple Commands简单的Command    152

Transactions事务    153

Physical and Temporal Decoupling实体上解耦和时间上解耦    154

Temporal Decoupling时间上解耦    154

UNDO undo()方法    154

ACTIVE 0BJECT ACTIVE OBJECT模式    155

Conclusion结论    l59

Bibliography参考文献    159

Chapter14 TEMPLATE METHOD&STRATEGY:Inheritance VS.Delegation

TEMPLATE METHOD模式~nSTRATEGY模式:继承和委托    161

TEMPLATE METHOD TEMPLATE METHOD模式    162

Pattern Abuse滥用模式    l64

Bubble Sort冒泡排序    l65

STRATEGY STRATEGY模式    168

Sorting Again再次排序    l70

Conclusion结论    l72

Bibliography参考文献    l72

Chaper15 FACADE and MEDIATOR FACADE模式和MEDlATOR模式    173

FACADE  FACADE模式    173

MEDIATOR  MEDIATOR模式    174

Conclusion结论    l76

Bibliography参考文献    l76

Chapter16 SINGLETON and MONOSTATE  SINGLETON模式和MONOSTATE模式    177

SINGLETON sINGLEToN模式    178

Benefits of the SINGLETON SINGLETON模式的好处    179

Costs of the SINGLETON SINGLETON模式的代价    179

SINGLETON in Action运用SINGLETONN模式    179

MONOSTATE MONOSTATE模式    180

Benefits of MONOSTATE MONOSTATE模式的好处    l82

Costs of MONOSTATE MONOSTATE模式的代价    l82

MONOSTATE in Action运用MONOSTATE模式    l82

Conclusion结论    187

Bibliography参考文献    l87

Chapter 17 NUI.I。0BJECT NULL OBJECT模式    189

Conclusion结论    l92

Bibliography参考文献    192

Chapter 18 The Payroll Case Study:Iteration One Begins 薪酬系统案例研究:第一次迭代开始    193

Introduction引言    193

Specification规格说明    193

Analysis bv Use Cases基于用例分析    194

Adding Employees增加新雇员    195

Deleting Employees删除雇员    196

Posting Time Cards登记考勤卡    196

Posting Sales Receipts登记销售凭条    197

Posting a Union Service Charge登记工会会费    197

Changing Employee Details更改雇员明细    198

Payday发薪日    199

Reflection:What Have We Learned?反思:我们学到了什么    20 1

Finding the Underlying Abstractions找出底层的抽象    201

The Schedule Abstraction时间表抽象    201

Payment Methods支付方式    202

Affiliations从属关系    202

Conclusion结论    203

Bibliography参考文献    203

Chapter 19 The Payroll Case Study:Implementation薪酬系统案例研究:实现    205

Adding Employees增加雇员    206

The Payroll Database薪酬系统数据库    207

Using TEMPLATE METHOD to Add Employees使用TEMPLATE MEn{OD模式增加雇员209

Deleting Employees删除雇员    212

Global Variables全局变量    213

Time Cards,Sales Receipts,and Service Charges考勤卡、销售凭条和会费    214

Changing Employees更改雇员属性    220

Changing Classification更改雇员类别    224

What Was I Smoking?一点意外    229

Paying Employees支付雇员薪水    233

Do We Want Developers Making Business Decisions?我们希望开发员做业务决策吗235

Paying S alaried Employees支付领月薪的雇员薪水    235

Paying Hourly Employees支付钟点工薪水    237

Pay Periods:A Design Problem支付期限:设计问题    241

Main Program主程序    248

The Database数据库    248

Summary of Payroll Design薪酬系统案例设计总结    249

History历史    249

Resources资源    250

Bibliography参考文献    250

Section 4 Packaging the Payroll System打包薪酬系统    251

Chapter 20 Principles of Package Design包设计原则    253

Designing with Packages?使用包进行设计    253

Granularity:The Principles of Package Cohesion包的内聚性原则:粒度    254

The Reuse-Release Equivalence Principle(REP)重用发布等价原则    254

THE GRANULE OF REUSE IS THE GRANULE OF RELEASE.

The Common-Reuse Principle(CRP)共同重用原则    255

THE CLASSES IN A PACKAGE ARE REUSED TOGETHER.IF YOU REUSEONE OF THE

CLASSES IN A PACKAGE,YOU REUSETHEMKEL.

The Common-Closure Principle(CCP)共同封闭原则    256

THE CLASSES IN A PACKAGE SHOULD BE CLOSED TOGETHER AGAINST THE SAME KINDS 0F CHANGES.A CHANGE THAT AFFECTS A PACKAGE AFFECTS ALL THE CLASSES IN THAT PACKAGE AND NO OTHER PACKAGES.

Summary of Package Cohesion包内聚性总结    256

Stability:The Principles 0f Package Coupling包的耦合性原则:稳定性    256

The Acyclic-Dependencies Principle(ADP)无环依赖原则    256

ALLOW NO CYCLES IN THE PACKAGE DEPENDENCY GRAPH.

The Weekly Build每周构建    257

Eliminating Dependency Cycles消除依赖环    257

The Effect of a Cycle in the Package Dependency Graph    258

环在包依赖关系图中造成的影响

Breaking the Cycle解除依赖环    259

The“Jitters”颠簸    259

Top-Down Design  自顶向下设计    260

The Stable-Dependencies Principle(SDP)稳定依赖原则(SDP)    261

DEPEND IN TIlE DIRECTION OF STABILITK

Stability稳定性    26 1

Stability Metrics稳定性度量    262

Not All Packages Should Be Stable并非所有包都应该是稳定的    263

Where Do We Put the High-level Design?高层设计的位置    264

The Stable-Abstractions Pri nciplc(SAP)稳定抽象原则(SAP)    264

A PACKAGE SHLOUD BE AS ABSTRACT As IT IS STABLE.

Measuring Abstraction抽象性度量    265

The Main Sequence主序列    265

Distance from the Main Sequence到主序列的距离    266

Conclusion结论    268

Chapter 21 FACTORY FACTORY模式    269

A Dependency Cycle依赖环    27 l

Substitutable Factories可替换的工厂    272

Using Factories for Test Fixtures对测试支架使用工厂    273

How Important Is It to Use Factories?工厂的重要性    274

Conclusion结论    274

Bibliography参考文献    274

Chapter 22 The Payroll Case Study(Part 2)薪酬系统案例研究:第2部分    275

Package Structure and Notation包结构与图示    276

Applying the Common Closure Principle rCCPl应用CCP    277

Applying the Reuse Release Equivalency Principle(REP)应用REP    278

Coupling and Encapsulation耦合和封装    279

Metrics度量    279

Applying the Metrics to the Payroll Application度量薪酬应用程序    282

Object Factories对象工厂    285

The Object Factory for Transactionlmplementation

Transactionlmplementation的对象工厂    286

Initializing the Factories初始化工厂    286

Rethinking the Cohesion Boundaries重新思考内聚的边界    287

The Final Package Structure最终的包结构    287

Conclusion结论    290

Bibliography参考文献    290

Section 5 The Weather Station Case Study气象站案例研究    291

Chapter23 COMPOSITE COMPOSITE模式    293

Example:Composite Commands示例:组合命令    294

Multiplicity or Not Multiplicity多重性还是非多重性    295

Chapter 24 OBSERVERIBacking into a Pattern OBSERVER--演化出模式    297

The Digital Clock数字时钟    297

Conclusion结论    314

The Use ofDiagrams in this Chapter本章中图的使用    314

Thc OBSERVER Pattern OBSERVER模式    3l5

How OBSERVER Manages the Principles ot’OOD OBSERVER中应用的OOD原则    316

Bibliography参考文献    316

Chapter25 ABSTRACT SERVER,ADAPTER,and BRIDGE    317

ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式    317

ABSTRACT SERVER ABSTRACT SERVER模式    318

Who Owns the Interface?谁拥有接口    318

Adapter ADAPTER模式    319

The class Form of ADAPTEP,类形式的ADAPTER模式    319

The Modem Problem,ADAPTERS and LSP调制解调器问题、适配器以及LSP    320

BRIDGE BRIDGE模式    322

Conclusion结论    324

Bibliography参考文献    325

Chapter26 PROXY and STAIRWAY TO HEAVEN:Managing Third Party APIs

PROXY模式和GATEWAY模式:管理第三方APl    327

PROXY PROXY模式    327

ProxifVing the Shopping Cart为购物车创建代理    332

Summary ot’PROXY PROXY小结    344

Dealing with Databases.Middleware,and Other Third Party Interfaces使用数据库、中间件以及其他第三方接口      345

STAIRWAY TO HEAVEN STAIRWAY TO HEAVEN模式    347

Example of STAIP,WAY TO HEAVEN STAIRWAYTO HEAVEN示例    348

Other Patterns That Can Be Used with Databases可用于数据库的其他模式    353

Conclusion结论    354

Bibliography参考文献    354

Chapter 27 Case Study:Weather Station案例研究:气象站软件    355

The Cloud Company Cloud公司    355

The WMS-LC Soflware WMS-LC软件    356

Language Selection语言选择    357

Nimbus-LC Software Design Nimbus-LC软件设计    357

24一Hour History and Persistence 24小时历史及持久化    368

Implementing the HiLo Algorithms实现HiLo算法    371

Conclusion结论    379

Bibliography参考文献    379

Nimbus-LC Requirements Overview Nimbus-LC需求概述    379

Usage Requirements使用需求    379

24一Hour History 24小时历史    379

User Setup用户设置    379

Administrative Requirements管理需求    380

Nimbus-LC Use Cases Nimbus-LC用例    380

Actors参与者    380

UseCases用例    380

Measurement History测量历史    380

Setup设置    381

Administration管理    381

Nimbus-LC Release Plan Nimbus-LC发布计划    3 8 1

Introduction小引    3 8 1

Release I    381

Risks风险    382

Deliverable(s)交付物    382

Release II    382

Use Cases Implemented实现的用例    382

Risks风险    383

Deliverable(s)交付物    383

Rclease III    383

Use Cases Implemented实现的用例    383

Risks风险    383

Deliverable(s)交付物    383

Section 6 The ETS Case Study ETS案例研究    385

Chapter 28 VISITOR VISITOR模式    387

The VISITOR Family of Design Patterns VISITOR系列设计模式    388

VISITOR VISITOR模式    388

VISITOR is Like a Matrix VISITOR就像一个矩阵    391

ACYCLIC VISITOR  ACYCLICVISITOR模式    391

ACYCLIC VISITOR ls Like a Sparse Matrix ACYCLIC VISITOR就像一个稀疏矩阵    396

Using VISITOR in Report Generators在报表生成器中使用ⅥsIToR模式    396

Other Uses of VISITOR  VISITOR的其他用途402

DECORATOR  DEcoRAToR模式      403

Multiple Decorators多个装饰器406

EXTENSION OB IECT EXTENSION OBJECT模式408

Conclusion结论    418

Reminder提醒418

Bibliography参考文献    4l8

Chapter29 STATE STATE模式        419

Overview of Finite State Automata FSM概述    419

Implementation Techniques 实现技术    421

Nested Switch/Case Statement嵌套switch/case语句          421

Interpreting Transition Tables 解释迁移表        424

The STATE Pattern STATE模式426

SMC T11c State-Machine Compiler状态机编译器429

Where Should State Machines be Used?状态机的应用场合    432

High-Level Application Policies for GUIs GUI高层应用策略    432

GUI Interaction Controllers GUI交互控制器        433

Distributed Processing分布式处理        433

Conclusion结论        434

Listings代码清单        434

Turnstile.Java Using Table Interpretation使用表解释        434

Turnstile.Java Generated by SMC.and Other Support Files

SMC生成的Turnstile.Java以及其他支持文件          437

Bibliography参考文献    441

Chapter 30 The ETS Framework ETS框架        443

Introduction简介        443

Project Overview项目概述        443

Early History 1993-1994早期历史        445

Framework?框架?        445

Framework!框架1         446

The 1994 Team 1994年的团队        446

The Deadline最后期限        446

The Strategy策略        446

Results结果        447

Framework Design框架设计        448

The Common Requirements of the Scoring Applications评分程序的主要需求        448

The Design of the Scoring Framework评分框架的设计        450

A Case for TEMPLATE METHOD应用TEMPLATE METHOD 453

Write a Loop Once一次只写一个循环        454

The Common Requirements of the Delivery Applications考试程序的主要需求        456

The Design of the Delivery Framework考试框架的设计        457

The Taskmaster Architecture任务控制架构        462

Conclusion结论        465

Bibliography参考文献        466

AppendixA UML Notation I:The CGI Example UML图示之一:CGI示例    467

Course Enrollment System:Problem Description课程注册系统:问题描述    468

Actors参与者        469

UseCases用例        469

The Domain Model领域模型            472

The Architecture架构        476

Abstract Classes and Interfaces in Sequence Diagrams序列图中的抽象类和接口      485

Summary总结        486

Bibliography参考文献        487

Appendix B UML Notation II:The STATMUX UML图示之二:STATMUX    489

The Statistical Multiplexor Definition统计多路复用器的定义    489

The Software Environment软件环境          490

The Real-time Constraints实时限制          490

The Input Interrupt Service Routine输入中断服务例程        491

The Output Service Interrupt Routine输出服务中断的例程        495

The Communications Protocol通信协议        496

Conclusion结论    506

Bibliography参考文献    506

Appendix C A Satire of Two Companies双公司记    507

RufuS,Inc.

Project Kickoff    507

Rupert Industries

Project:~Alpha~    507

AppendixD The Source Code Is the Design源代码就是设计    517

What Is Software Design?  什么是软件    517

Afterword  跋    523

Index    525

你可能感兴趣的:(monostate,状态)