标题：敏捷软件开发:原则、模式与实践
内容提要
本书旨在指导.NET程序员学习构建软件的最佳实践，从而创建更好的设计并提升.NET应用的质量。书中使用真实案例讲解如何用极限编程来设计、测试、重构和结对编程，包含了极具价值的可重用的C#源代码，还重点讲述了如何使用UML和设计模式解决面向客户系统的问题。
本书适于软件开发和管理人员提高自身水平学习之用，也适于用作高校计算机专业本科生、研究生以及软件学院的软件工程和软件开发相关课程的教材或参考书。
编辑推荐
软件开发的不朽经典，生动阐述面向对象原则、敏捷实践、UML和模式，大量C#实战示例，让你亲历现场，丰富的词汇和背景注释，助你轻松读经典。
“我最喜爱的技术作家RobertMartin善于通过实战展示技术，让读者能够以自己喜欢的方式逐步理解……请把Bob大叔当作你在敏捷世界里的导师。”
——ChrisSells，NET资深技术专家，微软“软件传奇人物”
“本书是对敏捷编程和敏捷原则最全面和最有价值的介绍……绝对是所有NET程序员必读之作。”
——JesseLiberty，微软资探技术专家，ProgrammingC#作者
要想成为一名优秀的软件开发傊，需要熟练应用编程语言和开发工具，更重要的是能够领悟代美代码背后的原则和前人总结的经验——这正是本书的主题。本书凝聚了世界级软件开发大师RobertCMartin数十年软件开发和培训经验，Java版曾荣获计算机图书最高荣誉——Jolt大奖，是广受推的经典著作，自出版以来一直畅销不衰。
本书不仅是一部深入浅出、生动易懂的面向对象原则与模式著作，而且还是一部通俗的敏捷方法导引书和快速实用UML教程。通过本书你会发现，许多以前看起来非常枯燥费解的概念，忽然间都豁然开朗，变得鲜活生动起来。
C#版与此前的Java版相比，主要的更新包括加强了对UML的介绍章节，使其更加贴近实战，增加了对MVP模式的介绍等。注释版在原著基础上增加了丰富的词语注释和背景提示，使读者能够轻松地领略原汁原味的名著的风采。
作者简介
RobertC.Martin世界级的软件开发大师，著名软件咨询公司ObjectMentor公司的创始人和总裁。曾经担任C++Report杂志主编多年，也是设计模式和敏捷开发运动的主要倡导者之一。
目录
SectionI：AgileDevelopment敏捷开发　
Chapter1：AgilePractices敏捷实践　
TheAgileAlliance敏捷联盟　
IndividualsandInteractionsoverProcessesandTools人和交互重于过程和工具　
WorkingSoftwareoverComprehensiveDocumentation可以工作的软件重于面面俱到的文档　
CustomerCollaborationoverContractNegotiation客户合作重于合同谈判　
RespondingtoChangeoverFollowingaPlan随时应对变化重于遵循计划　
Principles原则　
Conclusion结论　
Bibliography参考文献　
Chapter2：OverviewofExtremeProgramming极限编程概述　
ThePracticesofExtremeProgramming极限编程实践　
WholeTeam完整团队　
UserStories用户故事　
ShortCycles短交付周期　
AcceptanceTests验收测试　
PairProgramming结对编程　
Test．DrivenDevelopment(TDD)测试驱动开发　
CollectiveOwnership集体所有权　
ContinuousIntegration持续集成　
SustainablePace可持续的开发速度　
OpenWorkspace开放的工作空间　
ThePlanningGame计划游戏　
SimpleDesign简单设计　
Refactoring重构　
Metaphor隐喻　
Conclusion结论　
Bibliography参考文献　
Chapter3：Planning计划　
InitialExploration初始探索　
Spiking，Splitting，andVelocity探究、分解和速度　
ReleasePlanning发布计划　
IterationPlanning迭代计划　
Defining“Done”定义“完成”　
TlaskPlanning任务计划　
Iterating迭代　
Tracking跟踪　
Conclusion结论　
Bibliography参考文献　
Chapter4：Testing测试　
TIest-DrivenDevelopment测试驱动开发　
ExampleofTest-FirstDesign测试优先设计的例子　
TestIsolation测试促使模块之间隔离　
SerendipitousDecoupling意外获得的解耦合　
AcceptanceTests验收测试　
SerendipitousArchitecture意外获得的构架　
Conclusion结论　
Bibliography参考文献　
Chapter5：Refactoring重构　
ASimpleExampleofRefactoring：GeneratingPrimes素数产生程序：一个简单的重构示例　
UnitTesting单元测试　
Refactoring重构　
TheFinalReread最后审视　
Conclusion结论　
Bibliography参考文献　
Chapter6：AProgrammingEpisode一次编程实践　
TheBowlingGame保龄球比赛　
Conclusion结论　
OverviewoftheRulesofBowling保龄球规则概述　
SectionII　AgileDesign敏捷设计　
Chapter7：WhatIsAgileDesign什么是敏捷设计　
DesignSmells设计臭味　
DesignSmells——TheOdorsofRottingSoftware设计坏味——腐化软件的气味　
Rigidity僵化性　
Fragility脆弱性　
Immobility顽固性　
Viscosity粘滞性　
NeedlessComplexity不必要的复杂性　
NeedLlessRepetition不必要的重复　
Opacity晦涩性　
WhySoftwareRots软件为何会腐化　
TheCopyProgramCopy程序　
AFamiliarScenario熟悉的场景　
AgileDesignoftheCopyProgramcopy程序的敏捷设计　
Conclusion结论　
Bibliography参考文献　
Chapter8：TheSingle-ResponsibilityPrinciple(SRP)　SRP：单一职责原则　
DefiningaResponsibility定义职责　
SeparatingCoupledResponsibilities分离耦合的职责　
Persistence持久化　
Conclusion结论
Bibliography参考文献　
Chapter9：TheOpen/ClosedPrinciple(OCP)OCP：开放-封闭原则　
Description0fOCP　OCP概述　
TheShapeApplicationShape应用程序　
ViolatingOCP违反OCP　
ConformingtoOCP遵循OCP　
Anticipationand“Natural”Structure预测变化和“贴切的”结构　
Puttingthe“Hooks”In放置吊钩　
UsingAbstractiontoGainExplicitClosure使用抽象获得显式封闭　
UsingaData-DrivenApproachtoAchieveClosure使用“数据驱动"的方法获取封闭性　
Conclusion结论　
Bibliography参考文献　
Chapter10：TheLiskovSubstitutionPrinciple(LSP)LSP：Liskov替换原则　
Violations0fLSP违反LSP的情形　
ASimpleExample简单例子　
AMoreSubtleViolation更微妙的违反情形　
AReal-WorldExample实际的例子　
FactoringInsteadofDeriving用提取公共部分的方法代替继承　
HeuristicsandConventions启发式规则和习惯用法　
Conclusion结论　
Bibliography参考文献　
Chapter11：TheDependency-InversionPrinciple(DIP)DIP：依赖倒置原则　
Layering层次化　
OwnershipInversion倒置的接口所有权　
DependenceonAbstractions依赖于抽象　
ASimpleDIPExample简单的DIP示例　
FindingtheUnderlyingAbstraction找出潜在的抽象　
TheFurnaceExample熔炉示例　
Conclusion结论　
Bibliography参考文献　
Chapter12：TheInterfaceSegregationPrinciple(ISP)ISP：接口隔离原则　
InterfacePollution接口污染　
SeparateClientsMeanSeparateInterfaces分离客户就是分离接口　
ClassInterfacesversusObjectInterfaces类接口与对象接口　
SeparationThroughDelegation使用委托分离接口　
SeparationThroughMultipleInheritance使用多重继承分离接口　
TheATMUserInterfaceExample　ATM用户界面的例子　
Conclusion结论　
Bibliography参考文献　
Chapter13：OverviewofUMLforC#Programmers　C#程序员UML概观　
ClassDiagrams类图　
ObjectDiagrams对象图　
SequenceDiagrams顺序图　
CollaborationDiagrams协作图　
StateDiagrams状态图　
Conclusion结论　
Bibliography参考文献　
Chapter14：WorkingwithDiagrams使用UML　
WhyModel?为什么建模　
WhyBuildModelsofSoftware?为什么构建软件模型　
ShouldWeBuildComprehensiveDesignsBeforeCoding?编码前应该构建面面俱到的设计吗　
MakingEffectiveUseofUML有效使用UML　
CommunicatingwithOthers与他人交流　
RoadMaps脉络图　
Back-EndDocumentation项目结束文档　
WhattoKeepandWhattoThrowAway要保留的和要丢弃的　
IterativeRefinement迭代式改进　
BehaviorFirst行为优先　
ChecktheStructure检查结构　
EnvisioningtheCode想象代码　
EvolutionofDiagrams图的演化　
WhenandHowtoDrawDiagrams何时以及如何绘制图示　
WhentoDrawDiagramsandWhentoStop何时要画图，何时不要画图　
CASEToolsCASE工具　
ButWhatAboutDocumentation?那么，文档呢　
Conclusion结论　
Chapter15　StateDiagrams状态图　
TheBasics基础知识　
SpecialEvents特定事件　
Superstates超状态　
InitialandFinalPseudostates初始伪状态和结束伪状态　
UsingFSMDiagrams使用FSM图示　
Conclusion结论　
Chapter16：ObjectDiagrams对象图　
ASnapshotinTime即时快照　
ActiveObjects主动对象　
Conclusion结论　
Chapter17：UseCases示例　
WritingUseCases编写用例　
AlternateCourses备选流程　
WhatElse?其他东西呢　
DiagrammingUseCases用例图　
Conclusion结论　
Bibliography参考文献　
Chapter18：SequenceDiagrams顺序图　
TheBasics基础知识　
Objects，Lifelines，Messages，andOtherOddsandEnds对象、生命线、消息及其他　
CreationandDestruction创建和析构　
SimpleLoops简单循环　
CasesandScenarios时机和场合　
AdvancedConcepts高级概念　
LoopsandConditions循环和条件　
MessagesThatTakeTime耗费时间的消息　
AsynchronousMessages异步消息　
MultipleThreads多线程　
ActiveObjects主动对象　
SendingMessagestoInterfaces向接口发送消息　
Conclusion结论　
Chapter19：ClassDiagrams类图　
TheBasics基础知识　
Classes类　
Association关联　
Inheritance继承　
AnExampleClassDiagram类图示例　
TheDetails细节　
ClassStereotypes类衍型　
AbstractClasses抽象类　
Properties属性　
Aggregation聚集　
Composition组合　
Multiplicity多重性　
AssociationStereotypes关联衍型　
NestedClasses内嵌类　
AssociationClasses关联类　
AssociationQualifiers关联修饰符　
Conclusion结论　
Bibliography参考文献　
Chapter20　HeuristicsandC0ffee咖啡的启示　
TheMarkIVSpecialCoffeeMaker　MarkIV型专用咖啡机　
Specification规格说明书　260
ACommonbutHideousSolution常见的丑陋方案　
ImaginaryAbstraction虚构的抽象　
AnImprovedSolution改进方案　
ImplementingtheAbstractModel实现抽象模型　
TheBenefitsofThisDesign这个设计的好处　
Ooverkill面向对象过度设计　
Bibliography参考文献　
SectionⅢ　ThePayrollCaseStudy薪水支付案例研究　
RudimentarySpecificationofthePayrollSystem薪水支付系统的初步规格说明　
Exercise练习　
UseCase1：AddNewEmployee用例1：增加新雇员　
UseCase2：DeletinganEmployee用例2：删除雇员　
UseCase3：PostaTimeCard用例3：登记考勤卡　
UseCase4：PostingaSalesReceipt用例4：登记销售凭条　
UseCase5：PostingaUnionServiceCharge用例5：登记工会服务费　
UseCase6：ChangingEmployeeDetails用例6：更改雇员明细　
UseCase7：RunthePayrollforToday用例7：现在运行薪水支付系统　
Chapter21：CommandandActiveObject：VersatilityandMultitasking　COMMAND模式和ACTlVEOBJECT模式：多功能与多任务　
SimpleCommands简单的Command　
Transactions事务　
PhysicalandTemporalDecoupling实体上解耦和时间上解耦　
TemporalDecoupling时间上解耦　
UndoMethod　Undo()方法　
ActiveObject　ACTIVEOBJECT模式　
Conclusion结论　
Bibliography参考文献　
Chapter22：TemplateMethodandStrategy：InheritanceversusDeleg