敏捷軟體開發:原則、模式與實踐(英)

敏捷軟體開發:原則、模式與實踐(英)

本書旨在指導。NET程式設計師學習構建軟體的最佳實踐,從而創建更好的設計並提升。NET套用的質量。書中使用真實案例講解如何用極限編程來設計、測試、重構和結對編程,包含了極具價值的可重用的C#原始碼,還重點講述了如何使用UML和設計模式解決面向客戶系統的問題。本書適於軟體開發和管理人員提高自身水平學習之用,也適於用作高校計算機專業本科生、研究生以及軟體學院的軟體工程和軟體開發相關課程的教材或參考書。

內容提要

本書中,享譽全球的軟體開發專家和軟體工程大師RobertC.Martin深入而生動地使用真實案例講解了面向對象基本原則、重要的設計模式、UML和敏捷實踐等程式設計師必備的知識。

本書於2003年榮獲第13屆Jolt大獎,是C++和Java程式設計師提高自身水平的絕佳教材,也適於用作高校計算機、軟體工程專業相關課程的教材或參考書。

編輯推薦

軟體開發的不朽經典,生動闡述面向對象原則、敏捷實踐、UML和模式,大量C#實戰示例,讓你親歷現場,豐富的辭彙和背景注釋,助你輕鬆讀經典。

“我最喜愛的技術作家Robert Martin善於通過實戰展示技術,讓讀者能夠以自己喜歡的方式逐步理解……請把Bob大叔當作你在敏捷世界裡的導師。”

——Chris Sells,NET資深技術專家,微軟“軟體傳奇人物”

“本書是對敏捷編程和敏捷原則最全面和最有價值的介紹……絕對是所有NET程式設計師必讀之作。”

——Jesse Liberty,微軟資探技術專家,ProgrammingC#作者

要想成為一名優秀的軟體開發傊,需要熟練套用程式語言和開發工具,更重要的是能夠領悟代美代碼背後的原則和前人總結的經驗——這正是本書的主題。本書凝聚了世界級軟體開發大師Robert C Martin數十年軟體開發和培訓經驗,Java版曾榮獲計算機圖書最高榮譽——Jolt大獎,是廣受推的經典著作,自出版以來一直暢銷不衰。

本書不僅是一部深入淺出、生動易懂的面向對象原則與模式著作,而且還是一部通俗的敏捷方法導引書和快速實用UML教程。通過本書你會發現,許多以前看起來非常枯燥費解的概念,忽然間都豁然開朗,變得鮮活生動起來。

C#版與此前的Java版相比,主要的更新包括加強了對UML的介紹章節,使其更加貼近實戰,增加了對MVP模式的介紹等。注釋版在原著基礎上增加了豐富的詞語注釋和背景提示,使讀者能夠輕鬆地領略原汁原味的名著的風采。

作者簡介

RobertC.Martin(“Bob大叔”)世界級的軟體開發大師,著名軟體諮詢公司ObjectMento,公司的創始人和總裁。曾經擔任C++Report雜誌主編多年,也是設計模式和敏捷開發運動的主要倡導者之一。

目錄

Section I:Agile Development 敏捷開發

Chapter 1:Agile Practices 敏捷實踐 

The Agile Alliance 敏捷聯盟

Individuals and Interactions over Processes and Tools人和互動重於過程和工具

Working Software over Comprehensive Documentation 可以工作的軟體重於面面俱到的文檔

Customer Collaboration over Contract Negotiation 客戶合作重於契約談判

Responding to Change over Following a Plan 隨時應對變化重於遵循計畫

Principles 原則

Conclusion 結論

Bibliography 參考文獻

Chapter 2:Overview of Extreme Programming 極限編程概述 

The Practices of Extreme Programming 極限編程實踐

Whole Team 完整團隊

User Stories 用戶故事

Short Cycles 短交付周期

Acceptance Tests 驗收測試

Pair Programming 結對編程

Test.Driven Development(TDD) 測試驅動開發

Collective Ownership 集體所有權

Continuous Integration 持續集成

Sustainable Pace 可持續的開發速度

Open Workspace 開放的工作空間

The Planning Game 計畫遊戲

Simple Design 簡單設計

Refactoring 重構

Metaphor 隱喻

Conclusion 結論

Bibliography 參考文獻

Chapter 3:Planning 計畫 

Initial Exploration 初始探索

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

Release Planning 發布計畫

Iteration Planning 疊代計畫

Defining“Done” 定義“完成”

Tlask Planning 任務計畫

Iterating 疊代

Tracking 跟蹤

Conclusion 結論

Bibliography 參考文獻

Chapter 4:Testing 測試 

TIest-Driven Development 測試驅動開發

Example of Test-First Design 測試優先設計的例子

Test Isolation 測試促使模組之間隔離

Serendipitous Decoupling 意外獲得的解耦合

Acceptance Tests 驗收測試

Serendipitous Architecture 意外獲得的構架

Conclusion 結論

Bibliography 參考文獻

Chapter 5:Refactoring 重構 

A Simple Example of Refactoring:Generating Primes 素數產生程式:一個簡單的重構示例

Unit Testing 單元測試

Refactoring 重構

The Final Reread 最後審視

Conclusion 結論

Bibliography 參考文獻

Chapter 6:A Programming Episode 一次編程實踐 

The Bowling Game 保齡球比賽

Conclusion 結論

Overview of the Rules of Bowling 保齡球規則概述

Section II Agile Design 敏捷設計

Chapter 7:What Is Agile Design 什麼是敏捷設計 

Design Smells 設計臭味

Design Smells——The Odors of Rotting Software 設計壞味——腐化軟體的氣味

Rigidity 僵化性

Fragility 脆弱性

Immobility 頑固性

Viscosity 粘滯性

Needless Complexity 不必要的複雜性

NeedLless Repetition 不必要的重複

Opacity 晦澀性

Why Software Rots 軟體為何會腐化

The Copy Program Copy 程式

A Familiar Scenario 熟悉的場景

Agile Design of the Copy Program copy 程式的敏捷設計

Conclusion 結論

Bibliography 參考文獻

Chapter 8:The Single-Responsibility Principle(SRP) SRP:單一職責原則 

Defining a Responsibility 定義職責

Separating Coupled Responsibilities 分離耦合的職責

Persistence 持久化

Conclusion 結論

Bibliography 參考文獻

Chapter 9:The Open/Closed Principle(OCP) OCP:開放-封閉原則 

Description 0f OCP OCP概述

The Shape Application Shape 應用程式

Violating OCP 違反OCP

Conforming to OCP 遵循OCP

Anticipation and“Natural”Structure 預測變化和“貼切的”結構

Putting the“Hooks”In 放置吊鉤

Using Abstraction to Gain Explicit Closure使用抽象獲得顯式封閉

Using a Data-Driven Approach to Achieve Closure 使用“數據驅動"的方法獲取封閉性

Conclusion結論

Bibliography參考文獻

Chapter 10:The Liskov Substitution Principle(LSP) LSP:Liskov替換原則 

Violations 0f LSP 違反LS P的情形

A Simple Example 簡單例子

A More Subtle Violation 更微妙的違反情形

A Real-World Example 實際的例子

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

Heuristics and Conventions 啟發式規則和習慣用法

Conclusion 結論

Bibliography 參考文獻

Chapter 11:The Dependency-Inversion Principle(DIP) DIP:依賴倒置原則 

Layering 層次化

Ownership Inversion 倒置的接口所有權

Dependence on Abstractions 依賴於抽象

A Simple DIP Example 簡單的DIP示例

Finding the Underlying Abstraction 找出潛在的抽象

The Furnace Example 熔爐示例

Conclusion 結論

Bibliography 參考文獻

Chapter 12:The Interface Segregation Principle(ISP) ISP:接口隔離原則 

Interface Pollution 接口污染

Separate Clients Mean Separate Interfaces 分離客戶就是分離接口

Class Interfaces versus Object Interfaces 類接口與對象接口

Separation Through Delegation 使用委託分離接口

Separation Through Multiple Inheritance 使用多重繼承分離接口

The ATM User Interface Example ATM用戶界面的例子

Conclusion 結論

Bibliography 參考文獻

Chapter 13:Overview of UML for C# Programmers C#程式設計師UML概觀 

Class Diagrams 類圖

Object Diagrams 對象圖

Sequence Diagrams 順序圖

Collaboration Diagrams 協作圖

State Diagrams 狀態圖

Conclusion 結論

Bibliography 參考文獻

Chapter 14:Working with Diagrams 使用UML 

Why Model? 為什麼建模

Why Build Models of Software? 為什麼構建軟體模型

Should We Build Comprehensive Designs Before Coding? 編碼前應該構建面面俱到的設計嗎

Making Effective Use of UML 有效使用UML

Communicating with Others 與他人交流

Road Maps 脈絡圖

Back-End Documentation 項目結束文檔

What to Keep and What to Throw Away 要保留的和要丟棄的

Iterative Refinement 疊代式改進

Behavior First 行為優先

Check the Structure 檢查結構

Envisioning the Code 想像代碼

Evolution of Diagrams 圖的演化

When and How to Draw Diagrams 何時以及如何繪製圖示

When to Draw Diagrams and When to Stop 何時要畫圖,何時不要畫圖

CASE Tools CASE工具

But What About Documentation? 那么,文檔呢

Conclusion 結論

Chapter 15 State Diagrams 狀態圖 

The Basics 基礎知識

Special Events 特定事件

Superstates 超狀態

Initial and Final Pseudostates 初始偽狀態和結束偽狀態

Using FSM Diagrams 使用FSM圖示

Conclusion 結論

Chapter 16:Object Diagrams 對象圖 

A Snapshot in Time 即時快照

Active Objects 主動對象

Conclusion 結論

Chapter 17:Use Cases 示例 

Writing Use Cases 編寫用例

Alternate Courses 備選流程

What Else? 其他東西呢

Diagramming Use Cases 用例圖

Conclusion 結論

Bibliography 參考文獻

Chapter 18:Sequence Diagrams 順序圖 

The Basics 基礎知識

Obj ects,Lifelines,Messages,and Other Odds and Ends 對象、生命線、訊息及其他

Creation and Destruction 創建和析構

Simple Loops 簡單循環

Cases and Scenarios 時機和場合

Advanced Concepts 高級概念

Loops and Conditions 循環和條件

Messages That Take Time 耗費時間的訊息

Asynchronous Messages 異步訊息

Multiple Threads 多執行緒

Active Objects 主動對象

Sending Messages to Interfaces 向接口傳送訊息

Conclusion 結論

Chapter 19:Class Diagrams 類圖 

The Basics 基礎知識

Classes 類

Association 關聯

Inheritance 繼承

An Example Class Diagram 類圖示例

The Details 細節

Class Stereotypes 類衍型

Abstract Classes 抽象類

Properties 屬性

Aggregation 聚集

Composition 組合

Multiplicity 多重性

Association Stereotypes 關聯衍型

Nested Classes 內嵌類

Association Classes 關聯類

Association Qualifiers 關聯修飾符

Conclusion 結論

Bibliography 參考文獻

Chapter 20 Heuristics and C0ffee 咖啡的啟示 

The Mark IV Special Coffee Maker Mark IV型專用咖啡機

Specification 規格說明書 260

A Common but Hideous Solution 常見的醜陋方案

Imaginary Abstraction 虛構的抽象

An Improved Solution 改進方案

Implementing the Abstract Model 實現抽象模型

The Benefits of This Design 這個設計的好處

Ooverkill 面向對象過度設計

Bibliography 參考文獻

Section Ⅲ The Payroll Case Study 案例

Rudimentary Specification of the Payroll System 薪水支付系統的初步規格說明

Exercise 練習

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

Use Case 2:Deleting an Employee 用例2:刪除雇員

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

Use Case 4:Posting a Sales Receipt 用例4:登記銷售憑條

Use Case 5:Posting a Union Service Charge 用例5:登記工會服務費

Use Case 6:Changing Employee Details 用例6:更改雇員明細

Use Case 7:Run the Payroll for Today 用例7:現在運行薪水支付系統

Chapter 21:Command and Active Object:Versatility and Multitasking COMMAND模式和ACTlVE OBJECT模式:多功能與多任務 

Simple Commands 簡單的Command

Transactions 事務

Physical and Temporal Decoupling 實體上解耦和時間上解耦

Temporal Decoupling 時間上解耦

Undo Method Undo()方法

Active Object ACTIVE OBJECT模式

Conclusion 結論

Bibliography 參考文獻

Chapter 22:Template Method and Strategy:Inheritance versus Delegation TEMPLATE METHOD模式和STRATEGY模式:繼承和委託 

Template Method TEM PLATE METHOD模式

Pattern Abuse 濫用模式

Bubble Sort 冒泡排序

Strategy STRATEGY模式

Conclusion 結論

Bibliography 參考文獻

Chapter 23:Facade and Mediator FACAD E模式和MEDIATOR模式 

Facade FACADE模式

Mediator MEDIATOR模式

Conclusion 結論

Bibliography 參考文獻

Chapter 24:Singleton and Monostate SINGLETON模式和MONOSTATE模式 

Singleton SINGLETON模式

Benefits SINGLETON模式的好處

Costs SINGLETON模式的代價

Singleton in Action 運用SINGLETON模式

Monostate MONOSTATE模式

Benefits MONOSTATE模式的好處

Costs MONOSTATE模式的代價

Monostate in Action 運用MONOSTATE模式

Conclusion 結論

Bibliography 參考文獻

Chapter 25:Null Object NULL OBJECT 

Description 描述

Conclusion 結論

Bibliography 參考文獻

Chapter 26:The Payroll Case Study:Iteration 1 薪水支付案例研究:第一次疊代開始 

Rudimentary Specification 初步的規格說明

Analysis by Use Cases 基於用例分析

Adding Employees 增加新雇員

Deleting Employees 刪除雇員

Posting Time Cards 登記考勤卡

Posting Sales Receipts 登記銷售憑條

Posting a Union Service Charge 登記工會服務費

Changing Employee Details 更改雇員明細

Payday 發薪日

Reflection:Finding the Underlying Abstractions 反思:找出底層的抽象

Employee Payment 雇員支付類別抽象

Payment Schedule 支付時間表抽象

Payment Methods 支付方式

Affiliations 從屬關係

Conclusion 結論

Bibliography 參考文獻

Chapter 27:The Payroll Case Study:Implementation 薪水支付案例研究:實現 

Transactions 事務

Adding Employees 增加雇員

Deleting Employees 刪除雇員

Time Cards,Sales Receipts,and Service Charges 考勤卡、銷售憑條以及服務費用

Changing EmplOyees 更改雇員屬性

What Was I Smoking? 犯了什麼暈

Paying Employees 支付雇員薪水

Paying Salaried Employees 支付領月薪的雇員薪水

Paying Hourly Employees 支付鐘點工薪水

Main Program 主程式

The Database 資料庫

Conclusion 結論

About This Chapter 關於本章

Bibliography 參考文獻

Section IV:Packaging the Payroll System

Chapter 28:Principles of Package and Component Design 包和組件的設計原則 

Packages and Components 包和組件

Principles of Component Cohesion:Granularity 組件的內聚性原則:粒度

The Reuse/Release Equivalence Principle(REP) 重用-發布等價原則

The Common Reuse Principle(CRP) 共同重用原則

The Common Closure Principle(CCP) 共同封閉原則

Summary of Component Cohesion 組件內聚性總結

Principles of Component Coupling:Stability 組件的耦合陛原則:穩定性

The Acyclic Dependencies Principle(ADP) 無環依賴原則

The Stable-Dependencies Principle(SDP) 穩定依賴原則

The Stable-Abstractions Principle(SAP) 穩定抽象原則

Conclusion 結論

Chapter 29:Factory FACTORY模式

A Dependency Problem 依賴問題

Static versus Dynamic Typing 靜態類型與動態類型

SubStitutable Factories 可替換的工廠

Using Factories for TIest Fixtures 對測試支架使用對象工廠

Importance of Factories 工廠的重要性

Conclusion 結論

Bibliography 參考文獻

Chapter 30:The Payroll Case Study:Package Analysis 薪水支付案例研究:包分析

Component Structure and Notation 組件結構和符號

Applying the Common Closure Principle(CCP) 套用CCP

Applying the Reuse/Release Equivalence Principle(REP) 套用REP

Coupling and Encapsulation 耦合和封裝

Metrics 度量

Applying the Metrics to the Payroll Application 度量薪水支付應用程式

Object Factories 對象工廠

Rethinking the Cohesion Boundaries 重新思考內聚的邊界

The Final Packaging Structure 最終的包結構

Conclusion 結論

Bibliography 參考文獻

Chapter 31:Composite  COMPOSITE模式

Composite Commands 組合命令

Multiplicity or No Multiplicity 多重性還是非多重性

Conclusion 結論

Chapter 32:Observer:Evolving into a Pattern OBSERVER——演化至模式 

The Digital Clock 數字時鐘

The Observer Pattern OBSERVER模式

Models 模型

Management of OOD Principles 面向對象設計原則的運用

Conclusion 結論

Bibliography 參考文獻

Chapter 33:Abstract Server,Adapter,and Bridge ABSTRACTSERVER模式、ADAPTER模式和BRIDGE模式 

Abstract Server ABSTRACT SERVER模式

Adapter ADAPTER模式

The Class Form of Adapter 類形式ADAPTER模式

The Mode,m Problem,Adapters,and LSP 數據機問題、適配器以及LSP

Bridge BRIDGE模式

Conclusion 結論

Bibliography 參考文獻

Chapter 34:Proxy and Gateway:Managing Third-Party APIs PROXY模式和GATEWAY模式:管理第三方API

Proxy PROXY 模式

Implementing Proxy 實現PROXY模式

Summary 小結

Databases,Middleware,and Other Third.Party Interfaces 資料庫、中間件以及其他第三方接口

Table Data Gateway TABLE DATA GATEWAY

Testing and In.Memory TDGs 測試和記憶體TDG

Testing the DB Gateways 測試DbGateWay

Using Other Patterns with Databases 可以用於資料庫的其他模式

Conclusion 結論

Bibliography 參考文獻

Chapter 35:Visitor VISITOR模式

VISITOR VISITOR模式

Acyclic Visitor ACYCLIC VISITOR模式

Uses of VISITOR 使用VISITOR模式

Decorator DECORATOR模式

Extension Object EXTENSION OBJECT模式

Conclusion 結論

Bibliography 參考文獻

Chapter 36:State STATE模式

Nested Switch/Case Statements 嵌套switch/case語句

The Internal Scope State Variable 內部作用域的狀態變數

Testing the Actions 測試動作

Costs and Benefits 代價和收益

Transition Tables 遷移表

Using Table Interpretation 使用表解釋

Costs and Benefits 代價和收益

The State Pattern STATE模式

State versus Strategy STATE模式和STRATEGY模式

Costs and Benefits 代價和收益

The State Machine Compiler(SMC) 狀態機編譯器

Turnstile.CS Generated by SMC,and Other Support Files SMC生成的Turnstile.CS以及其他支持檔案 593

Costs and Benefits 代價和收益

Classes of State Machine Application 狀態機套用的場合

High-Level Application Policies for GUIs 作為GUI中的高層套用策略

GUI Interaction Controllers GUI互動控制器

Distributed Processing 分散式處理

Conclusion 結論

Bibliography 參考文獻

Chapter 37:The Payroll Case Study:The Database 薪水支付案例研究:資料庫

Building the Database 構建資料庫

A Flaw in the Code Design 一個代碼設計缺陷

Adding an Employee 增加雇員

Transactions 事務

Loading an Employee 載入Employee對象

What Remains? 還有什麼工作

Chapter 38:The Payroll User Interface:Model View Presenter 薪水支付系統用戶界面:Model-View-Presenter 

The Interface 界面

Implementation 實現

Building a Window 構建視窗

The Payroll Window Payroll 視窗

The Unveiling 真面目

Conclusion 結論

Bibliography 參考文獻

Appendix A:A Satire of Two Companies 雙公司記 

Rufus Inc.:Proj ect Kickoff Rufus公司:“日落”項目 671 Rupert Industries:Project Alpha Rupert工業公司:“朝暉”項目

Appendix B:What Is Software? 什麼是軟體

Index索引 

相關詞條

熱門詞條

聯絡我們