出版時(shí)間:2010-4 出版社:電子工業(yè)出版社 作者:張逸 頁(yè)數(shù):450
Tag標(biāo)簽:無
前言
我希望告別冗長(zhǎng)的前言,僅述說第2版的變更。寫作第2版的我,瘋狂地吸收了諸多大師的設(shè)計(jì)思想,這一點(diǎn)可以從參考文獻(xiàn)的前后差別看到端倪。這兩年以來,我又參與了幾個(gè)項(xiàng)目的設(shè)計(jì)與開發(fā)工作,所謂“實(shí)踐出真知”,在佐證大師觀點(diǎn)的同時(shí),自己對(duì)設(shè)計(jì)的認(rèn)識(shí)更進(jìn)了一步。或許,第2版不會(huì)比第1版優(yōu)秀太多,但至少會(huì)減少諸多不足。囿于版本,我無法做出新的突破。我期待能創(chuàng)作一本全新的書,全面論述我對(duì)軟件設(shè)計(jì)的認(rèn)識(shí)?,F(xiàn)在的我,還不足以寫出夢(mèng)想中的軟件設(shè)計(jì)之道。言歸正傳。整體而言,我對(duì)第1版的所有章節(jié)都進(jìn)行了一定程度的修訂?;蛘吒诉^去的錯(cuò)誤,或者進(jìn)一步完善了原有內(nèi)容。本書的內(nèi)容仍然是散漫而自由的,然而形散而神不散,大體遵循了設(shè)計(jì)的基本原則。在第1篇“設(shè)計(jì)之要”中,我新增了“對(duì)象法則”一章,言簡(jiǎn)意賅地介紹了面向?qū)ο笏枷氲暮诵囊嘏c設(shè)計(jì)原則。這基于我的一貫理念,即設(shè)計(jì)模式的核心本質(zhì)是面向?qū)ο笤O(shè)計(jì)思想的運(yùn)用。只有掌握了面向?qū)ο笤O(shè)計(jì)思想,才能真正體會(huì)設(shè)計(jì)模式的精髓,并將其運(yùn)用在實(shí)際的項(xiàng)目開發(fā)過程中?!皩?duì)象法則”一章可以有機(jī)地與“封裝變化”一章結(jié)合起來,再加上第23章“軟件體系架構(gòu)”的內(nèi)容,基本上勾勒出軟件設(shè)計(jì)的脈絡(luò),從面向?qū)ο笏枷氲皆O(shè)計(jì)模式,再到軟件體系架構(gòu)。在“封裝變化”一章中,我不僅完善了項(xiàng)目實(shí)例,還增加了關(guān)于如何“解耦具體依賴”的幾種技巧。對(duì)于軟件設(shè)計(jì)而言,這是非常有益的指導(dǎo)。我整個(gè)兒刪去了第1版的第5章“設(shè)計(jì),由你掌握”,并將其中的部分內(nèi)容轉(zhuǎn)移到“封裝變化”一章中。這使得第1篇的內(nèi)容更為緊湊,雖然刪去了討論極限編程的相關(guān)內(nèi)容,卻可以使得我們能夠更加關(guān)注于設(shè)計(jì),而不是方法學(xué)。第2篇“.NET框架與設(shè)計(jì)模式”增加了對(duì).NET3.X的源代碼分析。我無法做到與時(shí)俱進(jìn),因?yàn)?NET4.0即將走進(jìn).NET開發(fā)人員的程序生活?;蛟S在本書出版之后的不久,還會(huì)有5.0,6.0……我只是希望我的書不要被時(shí)代拋棄得太遠(yuǎn)。好在設(shè)計(jì)模式本身屬于經(jīng)典,而經(jīng)典總是能夠經(jīng)得起時(shí)間考驗(yàn)的。本書講述經(jīng)典,自然能討得一定好處。更新最明顯的是迭代器模式在.NET中的實(shí)現(xiàn)。C#2.0引入的yieldreturn以及.NET3.0引入的Lambda表達(dá)式都為迭代器模式在.NET中成為一種慣用法貢獻(xiàn)了一份心力。我對(duì)此的分析,可以在一定程度上幫助讀者更好地理解迭代器模式。在第2篇中,我新增了一章“.NET中的命令模式”,通過解析.NET3.0引入的WF(WindowsWorkflowFoundation),展現(xiàn)命令模式的非凡價(jià)值。第2篇的內(nèi)容雖然與.NET平臺(tái)息息相關(guān),但對(duì)于其他平臺(tái)的開發(fā)人員而言,仍有可觀之處。我在撰寫本書第2版時(shí),同樣參考了Java平臺(tái)的設(shè)計(jì)理念,以及Ruby中的設(shè)計(jì)模式。
內(nèi)容概要
《軟件設(shè)計(jì)精要與模式(第2版)》關(guān)注的焦點(diǎn)是軟件設(shè)計(jì),涵蓋了大部分與設(shè)計(jì)有關(guān)的基本要素,包括面向?qū)ο笏枷?、設(shè)計(jì)模式、重構(gòu)、測(cè)試驅(qū)動(dòng)開發(fā)、極限編程以及軟件體系架構(gòu)。其中,尤以設(shè)計(jì)模式為主,深入探討了軟件設(shè)計(jì)過程中的原則與模式,并結(jié)合大量的實(shí)例與代碼演示了如何合理運(yùn)用設(shè)計(jì)模式,改善程序模塊的可復(fù)用性、可擴(kuò)展性,實(shí)現(xiàn)模塊間的松散耦合。全書將軟件設(shè)計(jì)理論與項(xiàng)目實(shí)踐完美地結(jié)合起來,使其告別了純理論研究的空泛,具有現(xiàn)實(shí)的指導(dǎo)意義?! 盾浖O(shè)計(jì)精要與模式(第2版)》適用于所有希望提高軟件設(shè)計(jì)水平的程序員、軟件工程師,同時(shí),對(duì)于軟件設(shè)計(jì)師與系統(tǒng)架構(gòu)師也具有一定的參考價(jià)值。
作者簡(jiǎn)介
張逸,軟件架構(gòu)師,敏捷教練,微軟最有價(jià)值專家,InfoQ.NET豐土區(qū)常務(wù)編輯,msup資深講師。目前擔(dān)任中軟國(guó)際ETC(重慶)技術(shù)總監(jiān)。主要專注于軟件架構(gòu)、設(shè)計(jì)模式、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)和敏捷開發(fā),以及基于.NET平臺(tái)的企業(yè)級(jí)系統(tǒng)應(yīng)用開發(fā)和分布式開發(fā)。曾先后為可口可樂、摩托羅拉、HP、京東方、尼桑、摩洛哥電信、盛大、第九城市、CA、攜程等企業(yè)提供設(shè)計(jì)、開發(fā)、咨詢與培訓(xùn)服務(wù)。他的著譯作包括《軟件設(shè)計(jì)精要與模式》、《WCF服務(wù)編程》。
書籍目錄
第1篇 設(shè)計(jì)之要第1章 設(shè)計(jì)之道1.1 計(jì)劃的設(shè)計(jì)與演進(jìn)的設(shè)計(jì)1.2 架構(gòu)的標(biāo)準(zhǔn)1.3 過度設(shè)計(jì),還是簡(jiǎn)單設(shè)計(jì)1.4 需要設(shè)計(jì)模式嗎1.5 重構(gòu)是必然的1.6 UML重要嗎1.7 測(cè)試驅(qū)動(dòng)開發(fā)第2章 對(duì)象法則2.1 面向?qū)ο笏枷?.2 面向?qū)ο蠛诵囊?.2.1 封裝2.2.2 繼承2.2.3 多態(tài)2.3 面向?qū)ο笤O(shè)計(jì)原則2.3.1 單一職責(zé)原則2.3.2 開放封閉原則2.3.3 Liskov替換原則2.3.4 依賴倒置原則2.3.5 接口隔離原則第3章 封裝變化3.1 設(shè)計(jì)模式之鵠的3.2 如何封裝變化3.2.1 封裝對(duì)象行為的變化3.2.2 封裝對(duì)象創(chuàng)建的變化3.2.3 封裝對(duì)象結(jié)構(gòu)的變化3.3 解耦具體依賴3.3.1 配置文件與反射技術(shù)3.3.2 表驅(qū)動(dòng)法3.3.3 慣例優(yōu)于配置3.3.4 依賴注入第4章 體驗(yàn)重構(gòu)4.1 一個(gè)階乘容器4.2 代碼的壞味道4.3 需求發(fā)生變化4.4 運(yùn)用重構(gòu)利器4.5 引入設(shè)計(jì)模式第5章 測(cè)試驅(qū)動(dòng)開發(fā)5.1 發(fā)現(xiàn)價(jià)值與生產(chǎn)價(jià)值5.2 運(yùn)用面向?qū)ο缶幊趟枷?.3 適時(shí)小結(jié)5.4 收獲價(jià)值5.5 無上之力第2篇 NET框架與設(shè)計(jì)模式第6章 NET中的工廠方法模式6.1 “嫁禍江東”之計(jì)6.2 WebRequest對(duì)象的創(chuàng)建6.3 改造工廠方法模式6.4 實(shí)現(xiàn)良好的可擴(kuò)展性6.5 慣例優(yōu)于配置第7章. NET中的合成模式7.1 字處理軟件7.2 NET框架中的控件7.3 “復(fù)合方式”的合成模式第8章 .NET中的裝飾器模式8.1 一步一步走向裝飾器模式8.2 NET框架中對(duì)流的處理第9章 NET中的迭代器模式9.1 分辨對(duì)象的職責(zé)9.2 實(shí)現(xiàn)迭代器模式9.3 迭代器模式大觀園9.4 迭代器模式在.NET框架中的實(shí)現(xiàn)9.5 通過yieldreturn實(shí)現(xiàn)迭代器9.6 C#3.0對(duì)迭代器模式的支持第10章 NET中的策略模式10.1 稅務(wù)系統(tǒng)10.2 利用委托實(shí)現(xiàn)策略模式10.3 NET框架中的Provider對(duì)象第11章 NET中的命令模式11.1 考勤管理系統(tǒng)11.2 命令模式在WF中的運(yùn)用11.3 合成模式與命令模式的結(jié)合第3篇 媒體播放器的設(shè)計(jì)之旅第12章 面向?qū)ο笈c接口分離12.1 拙劣的設(shè)計(jì)12.2 面向?qū)ο笤O(shè)計(jì)12.3 接口分離12.4 解除具體依賴第13章 接口行為的適配13.1 新的應(yīng)用場(chǎng)景13.2 “狼”與“羊”的關(guān)系13.3 引入適配器模式13.3.1 類的適配器模式13.3.2 對(duì)象的適配器模式13.4 適配器模式比較第14章 接口行為的擴(kuò)展14.1 設(shè)計(jì)走向死胡同14.2 考察適配器模式14.3 引入訪問者模式14.4 非循環(huán)訪問者模式14.5 合理運(yùn)用訪問者模式第15章 接口行為的裝飾15.1 不斷變化的需求15.2 考慮代理模式15.3 引入裝飾器模式第4篇 設(shè)計(jì)模式應(yīng)用實(shí)踐第16章 抽象工廠模式應(yīng)用16.1 報(bào)表組件16.2 糟糕的設(shè)計(jì)16.3 引入抽象工廠模式16.4 工廠對(duì)象的使用……第17章 建造者模式應(yīng)用第18章 命令模式應(yīng)用第19章 職責(zé)鏈模式應(yīng)用第20章 觀察者模式應(yīng)用第21章 代理模式應(yīng)用第22章 設(shè)計(jì)模式綜合應(yīng)用第5篇 NET體系架構(gòu)第23章 軟件體系架構(gòu)第24章 數(shù)據(jù)訪問層第25章 消息處理第26章 ASP.NET緩存第27章 業(yè)務(wù)邏輯層第28章 變現(xiàn)層參考文獻(xiàn)
章節(jié)摘錄
插圖:第1篇 設(shè)計(jì)之要第1章 設(shè)計(jì)之道1.4 需要設(shè)計(jì)模式嗎如果僅考慮實(shí)現(xiàn)當(dāng)前的功能需求,還需要設(shè)計(jì)模式嗎?坦白地說,我并不認(rèn)為設(shè)計(jì)模式與過度設(shè)計(jì)有關(guān)。過度設(shè)計(jì)的導(dǎo)火索是設(shè)計(jì)模式的濫用。很多時(shí)候,合理地利用設(shè)計(jì)模式反而能使程序結(jié)構(gòu)簡(jiǎn)單化,特別是,它能夠讓開發(fā)過程更簡(jiǎn)單。Christopher Alexander在描述城市和建筑模式時(shí)說,“每一個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復(fù)勞動(dòng)。”設(shè)計(jì)模式正是為解決軟件開發(fā)領(lǐng)域中的類似問題,從而提出的解決方案,它作為面向?qū)ο缶幊探?jīng)驗(yàn)的總結(jié),是軟件設(shè)計(jì)技巧中最重要的方法與原則。放棄設(shè)計(jì)模式,意味著希望成為優(yōu)秀設(shè)計(jì)師的你,在將歷史的車輪向前倒?jié)L了十年之后,有幸成為了和GOF同行的偉大先驅(qū)者。你放棄了站在前人肩膀上眺望遠(yuǎn)方的機(jī)會(huì),而選擇自己艱難吃力地踮起腳尖,最后失去的卻是更遠(yuǎn)處美麗的風(fēng)景。需要設(shè)計(jì)模式嗎?答案看來是不言而喻。關(guān)鍵一點(diǎn)是需要確定模式的應(yīng)用是否過度?世界上很多天才橫溢的程序員,可以在一段代碼中包含6種設(shè)計(jì)模式,也可以不利用模式就能把設(shè)計(jì)做得很好。然而,軟件設(shè)計(jì)的目標(biāo)并不是炫耀茴香豆的“茴”字有幾種寫法,我們需要的是有效的設(shè)計(jì)。學(xué)習(xí)設(shè)計(jì)模式,不是為了炫耀、吹噓,不是為了故作艱深,而是為了改善我們的設(shè)計(jì),它可以為某種功能實(shí)現(xiàn)提供參考模型、設(shè)計(jì)方法以及應(yīng)用范例。我們不需要奉GOF的設(shè)計(jì)模式為圭臬,盲目地膜拜它,合理地運(yùn)用設(shè)計(jì)模式,才是明智的抉擇。
媒體關(guān)注與評(píng)論
本書力求講解淺顯明白。在技術(shù)探討上,盡可能地深入透徹;在每一字的描述上,盡可能地簡(jiǎn)單易懂。本書適用于所有希望提高軟件設(shè)計(jì)水平的程序員、軟件工程師,同時(shí),對(duì)于軟件設(shè)計(jì)師與系統(tǒng)架構(gòu)師也具有一定的參考價(jià)值。從實(shí)踐分享的視角來看,書的內(nèi)容編寫地非常認(rèn)真。作者從自身工作的經(jīng)歷,分享了自己對(duì)軟件設(shè)計(jì)的理解,并以設(shè)計(jì)原則這樣的方式,來分享最宏觀層面上的要點(diǎn)??偨Y(jié)、思考的分量,可見一斑。本書有些章節(jié)很有新意,注意到了利用自身實(shí)踐過的設(shè)計(jì)模式,以真實(shí)示例的方式來介紹如何靈活使用各種設(shè)計(jì)模式。此舉對(duì)讀者的實(shí)際工作,頗有幫助,愿為推薦?! 鏖T子中國(guó)中央研究學(xué)院,首席架構(gòu)師
編輯推薦
《軟件設(shè)計(jì)精要與模式(第2版)》:“給我一個(gè)支點(diǎn),我就能撬起地球”,關(guān)鍵不在于力量有多大,而在于如何合理地利用力量。軟件設(shè)計(jì)同樣如此,思想的確立,技巧的把握,將在很大程度上制約軟件架構(gòu)的合理性?!盾浖O(shè)計(jì)精要與模式(第2版)》力圖通過大量的項(xiàng)目實(shí)踐,并與軟件設(shè)計(jì)思想完美結(jié)合,充分展示軟件設(shè)計(jì)之美,以及設(shè)計(jì)“力量”的巧妙運(yùn)用。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載