敏捷思維: 架構設計中的方法學(xué)(15)進(jìn)一步閱讀 ![]() |
![]() | 級別: 初級 林星, 項目經(jīng)理, 辰訊軟件工作室 2003 年 2 月 01 日 敏捷架構設計一文到目前已經(jīng)全部結束,由于架構設計是一個(gè)很大的話(huà)題,要在一篇文章中完全把架構設計講清楚是很難的。因此本文的最后一個(gè)章節中提供了一組書(shū)籍和文章,這些資料都和架構設計有關(guān),本文的寫(xiě)作過(guò)程也從中獲益良多,故而推薦給有興趣的讀者。 Refactoring To Patterns(Joshua Kerievsky)勿庸置疑,模式是軟件設計的一種有效的工具。但是在將模式和現實(shí)中的軟件設計關(guān)聯(lián)起來(lái)時(shí),很多人往往迷惑于模式到底是如何應用的。結果是表現出兩種極端:一是用不好模式,二是過(guò)度的濫用模式。模式是他人設計經(jīng)驗的總結,但是它在提供優(yōu)秀的設計思路的同時(shí)也會(huì )增加一定的復雜性。因此,不了解模式應用的上下文環(huán)境而錯誤的使用模式是非常危險的。不但達不到原先的效果,而且會(huì )導致設計難以理解和設計團隊溝通的困難。文章一開(kāi)始,作者就批評了濫用模式的做法。那么,到底要怎樣才算是正確的使用模式呢?作者借鑒了Martin Fowler的重構方法。通過(guò)實(shí)際的例子,討論如何把一個(gè)普通的、不夠靈活、不具備擴展性的設計重構為一個(gè)優(yōu)美的設計模式。因此,本文的核心在于,如何識別哪些設計需要重構?如何判斷重構的時(shí)機?如何評價(jià)重構前后的優(yōu)缺點(diǎn)?以及,如何進(jìn)行重構?本書(shū)目前正在寫(xiě)作中,從http://industriallogic.com可以找到其草稿。在透明的網(wǎng)站和umlchina上,也可以找到部分的譯稿。在閱讀架構重構模式后,你可以再翻閱此文,這樣你就可以了解到該模式在代碼級別上的實(shí)現。 Effective Java(Joshua Bloch)此書(shū)的定位于編程習慣(Idiom)和良好的OO思維上。任何的設計都無(wú)法脫離最終的代碼。因此,擅長(cháng)于架構設計的設計師一定也擁有渾厚的編碼功力。優(yōu)秀的軟件過(guò)程是由大量?jì)?yōu)秀的實(shí)踐拚接而成,架構設計也是一樣的,它是由大量的代碼級的實(shí)踐累積起來(lái)的。此外,本書(shū)的很多討論都是關(guān)于如何進(jìn)行一個(gè)優(yōu)秀的OO設計的。在本文中,我們很多關(guān)于具體設計的討論都是基于OO設計的,在穩定化模式中我們也討論了OO設計優(yōu)秀之處。因此,在了解架構設計的基本思路后,閱讀此書(shū),你可以進(jìn)一步的了解和強化OO架構的設計思路。順便一提,本書(shū)的中文版即將面世。 Writing Effective Use Case(Alistair Cockburn)文如其名,本書(shū)主要介紹了如何編寫(xiě)用例的知識。在架構設計中,我們不斷的強調需求的重要性,可以說(shuō),沒(méi)有需求,就沒(méi)有架構。那么,需求應該如何組織呢?用例就是一種不錯的需求組織方式,注意,用例并不能夠完全代替需求,類(lèi)似于業(yè)務(wù)流程、非功能需求之類(lèi)的需求都不是用例所擅長(cháng)的。本書(shū)的精華就在于它完整的介紹了敘述型用例的各個(gè)方面,從用例的范圍、角色、層次等方面描述了用例的構成,并討論了用例的很多相關(guān)知識。更為寶貴的是,本書(shū)中包含了大量的實(shí)例。相較一些介紹用例圖的書(shū)而言,本書(shū)的定位更加的實(shí)踐化。一個(gè)優(yōu)秀的需求的價(jià)值在于,它能夠很容易的轉換為軟件開(kāi)發(fā)過(guò)程中其它實(shí)踐所需要的工件。如果我們仔細的體悟本書(shū)的話(huà),我們會(huì )發(fā)現書(shū)中的很多思路都是基于此的。本書(shū)在市面上可以找到中文版和英文版兩種版本。 Thinking in Patterns(Bruce Eckel)Bruce Eckel的另外兩本書(shū)《Thinking in C++》和《Thinking in Java》可以說(shuō)是非常的出名。后者更是有三個(gè)版本,前兩個(gè)版本都有中文譯本,候捷老師更是親自翻譯了第二個(gè)版本,第三個(gè)版本目前正在寫(xiě)作中,從Bruce Eckel的網(wǎng)站( http://www.mindview.net)上可以下載到?!禩hinking in Patterns》目前也仍然處于寫(xiě)作中,但已經(jīng)略具規模了。Bruce Eckel從不同的應用角度來(lái)討論模式之間的不同以及模式的內涵。例如,對工廠(chǎng)模式的討論是從封裝對象創(chuàng )建的角度開(kāi)始討論的,對適配器模式的討論則是從改變接口的角度開(kāi)始討論的。模式的關(guān)鍵在于應用,閱讀本書(shū),你能夠體會(huì )到這一點(diǎn)。 Java 與模式(閻宏)如果說(shuō)上述的一些好文都出自國外專(zhuān)家之手,那么這本書(shū)就是絕對的中文原創(chuàng )。本書(shū)的重點(diǎn)是討論隱藏在模式背后的面向對象規律,并一一對各種設計模式進(jìn)行分析和實(shí)例研討。使用很多有趣的例子和運用哲學(xué)思維來(lái)解釋模式是本書(shū)的兩大特色。在閱讀該書(shū)的時(shí)候,請注意區分技術(shù)細節和框架代碼。設計模式的好處就在于能夠根據上下文環(huán)境,設計出一個(gè)具有靈活性、擴展性、低耦合度的框架來(lái)。這和架構設計的思路是一樣的,不要在軟件開(kāi)發(fā)過(guò)程的早期考慮太多的細節。 Patterns of Enterprise Application Architecture(Martin Fowler)這是一本絕對的討論架構設計模式的書(shū)了,但這里的架構是特指企業(yè)信息系統的架構,這和本文討論的問(wèn)題域是一樣的。根據三層結構的理論,本書(shū)的模式大致可以分為5類(lèi):表示層模式、邏輯層模式、數據層模式、分布式模式、以及一些基礎的模式。書(shū)的早期版本采用了這種分類(lèi)法,在出版之后,模式的分類(lèi)進(jìn)一步細化。例如數據層模式就被進(jìn)一步的區分為數據源架構模式、對象-關(guān)系行為模式、對象-關(guān)系結構模式、對象-關(guān)系元數據映射模式等。本書(shū)的內容覆蓋面很廣,Martin Fowler在素材的組織上擁有非常優(yōu)異的才能,當年的《重構》一書(shū)就是這方面的例證。閱讀本書(shū),你會(huì )對架構設計的技術(shù)層面有著(zhù)很深的了解,但是,應該注意,書(shū)中的一些模式雖然看起來(lái)簡(jiǎn)單,但是如果要真正實(shí)現,卻需要花費大量的精力,因此,聽(tīng)從《Refactoring To Patterns》一書(shū)和本文重構模式的建議吧,只有在需要的時(shí)候才把設計重構為模式。 Dealing with Roles(Martin Fowler)這只是一篇小短文,討論的重點(diǎn)是關(guān)于角色處理的知識,但作者從面向對象的基礎知識出發(fā),討論了如何根據需求的不同,來(lái)進(jìn)行不同的設計,并用實(shí)際的例子,演示了設計是如何變化的。這種思想和本文提倡的思想是非常的相似的,架構設計不能夠獨立于需求而存在。建議不論是對面向對象設計有興趣還是對軟件工程有興趣的人都可以閱讀此文。在Martinfowler的網(wǎng)站上(http://www.martinfowler.com)可以找到本文,次外,網(wǎng)站上還有其它一些優(yōu)秀作品,《Dealing with Properties》就是其中的一篇。我曾經(jīng)為《Dealing with Roles》一問(wèn)撰寫(xiě)了一篇讀書(shū)筆記,發(fā)布在點(diǎn)空間上(http://www.dotspace.twmail.net/patternscolumn/analysis%20patterns/RoseModelingNotes_S.htm),如果有興趣,也可以指導一二。 《Framework Process Patterns》(James Carey,Brent Carlson)本書(shū)的作者是IBM公司的成員,他們有著(zhù)面向對象操作系統和企業(yè)應用框架的設計經(jīng)驗,而后者,這是著(zhù)名的IBM SanFrancisco框架。他們把框架設計中學(xué)習到的知識整理為過(guò)程模式的形式,書(shū)中并沒(méi)有太多的理論,但處處都體現出了作者的豐富經(jīng)驗。在閱讀本書(shū)的時(shí)候,要時(shí)刻牢記其推介的框架設計的特點(diǎn),再結合自己工作的具體情況,來(lái)理解和應用這些模式。不要盲目的把書(shū)中介紹的模式應用于自身,這是我的忠告。本書(shū)的中文版由我和一位朋友翻譯,將不日面世。 IBM Sanfrancisco 框架,這并不是一本書(shū),而是一個(gè)現實(shí)中的產(chǎn)品。IBM根據市場(chǎng)經(jīng)驗,設計了一個(gè)企業(yè)應用框架,定位于為企業(yè)應用開(kāi)發(fā)者提供通用的組件。從這個(gè)產(chǎn)品中,你可以充分的了解到模式是如何應用在一個(gè)成熟的產(chǎn)品中的。要了解這個(gè)產(chǎn)品的設計思路,關(guān)鍵是要先了解它的層次劃分。SanFrancisco框架總共分為三個(gè)層次:Foundation Layer、Common Business Objects Layer、Core Business Process Layer。Foundation Layer定義了基礎的類(lèi)以及類(lèi)的使用策略,例如工廠(chǎng)類(lèi)來(lái)負責所有對象的創(chuàng )建;Common Business Objects Layer定義了企業(yè)中的一些通用對象,例如公司、帳戶(hù)、客戶(hù)等,而Core Business Process Layer定義了企業(yè)應用所需要的關(guān)鍵業(yè)務(wù)流程,包括會(huì )計框架、應收應付、訂單處理、庫存管理幾個(gè)方面。這三個(gè)層次可以進(jìn)行獨立的重用,越高的層次的重用價(jià)值越大。在理解這樣一個(gè)產(chǎn)品的時(shí)候,我們要有這樣的思路,對于一個(gè)大型的產(chǎn)品來(lái)說(shuō),一致性有時(shí)候是重于其它的價(jià)值的,例如,在對象創(chuàng )建方面,產(chǎn)品統一使用了工廠(chǎng)模式,而在屬性處理上,統一使用了動(dòng)態(tài)屬性的設計方式。雖然有些地方并不需要用到這兩種設計模式,但是為了保持設計的一致性,還是必須使用該模式。這一點(diǎn)對于普通的項目開(kāi)發(fā)或是小產(chǎn)品開(kāi)發(fā)來(lái)說(shuō)可能未必適用,但是對于大型的項目或產(chǎn)品來(lái)說(shuō)就顯得非常的重要了。 ![]() Applying Patterns(Frank Buschmann)這是一篇用過(guò)程模式語(yǔ)言來(lái)描述如何在實(shí)際中應用設計模式的文章。文章短小精悍,把設計模式的應用總結為幾種模式,沒(méi)有提供具體的實(shí)例是個(gè)遺憾。對正在學(xué)習設計模式的人而言,花一些時(shí)間了解別人是如何應用設計模式是很有必要的。在點(diǎn)空間上可以找到原文鏈接和繁體版譯文。本文的架構愿景模式就參考了這篇文章中的內容。 重構(Martin Fowler)其實(shí)本書(shū)已經(jīng)不用再介紹了,他的價(jià)值就在于他能夠把程序員日常的很多優(yōu)秀做法提升到理論的階段,并為更多的程序員提供指導。這也是我在上文夸獎Martin Fowler具有優(yōu)異的組織才能的一大原因。遺憾的是,本書(shū)一直沒(méi)有中文譯本,不過(guò)這個(gè)遺憾即將結束,候捷和透明正在合譯此書(shū),相信不久之后就可以一飽眼福。 http://www.refactoring.com是Martin Fowler創(chuàng )建的重構的討論站點(diǎn),上面也會(huì )很多的相關(guān)內容。而關(guān)于重構的另一方面的消息是,現在已經(jīng)有越來(lái)越多的建模工具將重構作為重要的特性之一,這無(wú)疑能夠為程序員節省大量的精力。 http://www.agiledata.org(Scott W. Ambler) 這是Scott W. Ambler 最新維護的一個(gè)網(wǎng)站,也代表了Agile方法發(fā)展的一個(gè)方向――如何以敏捷的姿態(tài)進(jìn)行數據庫項目的開(kāi)發(fā)。在讀過(guò)站點(diǎn)的內容之后,你會(huì )了解到如何做好數據庫項目的開(kāi)發(fā)。目前,本站點(diǎn)還在Scott W. Ambler的維護下不斷的更新。數據庫設計一直不是面向對象陣營(yíng)強調的一個(gè)重點(diǎn),基本的觀(guān)點(diǎn)認為,關(guān)鍵是類(lèi)的設計足夠規范,數據庫并不是主要問(wèn)題。但是在實(shí)際的項目中,數據庫,特別是關(guān)系型數據庫往往是無(wú)法忽略的部分,包括數據庫模式的設計、性能優(yōu)化、數據庫連接管理、數據操縱語(yǔ)言。除此之外,遺留數據庫、并發(fā)問(wèn)題、安全,關(guān)系數據到對象的映射,業(yè)務(wù)邏輯處理,這些都是需要在架構設計的時(shí)候就加以考慮的問(wèn)題。在本文中并沒(méi)有專(zhuān)門(mén)的章節對數據庫相關(guān)的知識進(jìn)行討論,因為數據庫的討論最好是結合具體的數據庫進(jìn)行。如果大家在架構設計中存在數據庫方面的問(wèn)題,可以參考這個(gè)網(wǎng)站。 Designing for Scalability with Microsoft Windows DNA(Sten Sundblad)目前關(guān)于討論微軟體系平臺設計的優(yōu)秀書(shū)籍不多,而本書(shū)正是其中之一。本書(shū)介紹了DNA體系下設計一個(gè)分層架構所要注意的問(wèn)題。其核心思想是避免純理論的面向對象設計。例如,書(shū)中在介紹領(lǐng)域對象的時(shí)候,建議將只讀對象和可寫(xiě)對象分開(kāi)處理,這樣,只讀對象就不需要COM+的支持,能夠提高效率,但這是不符合面向對象的設計的封裝思路的。另外,為了能夠使用對象緩沖池技術(shù),本書(shū)提議在設計業(yè)務(wù)對象的時(shí)候不要包括狀態(tài)數據,這和類(lèi)包括數據和行為的基本思路也是相斥的。從這本書(shū)中,我們可以了解到現實(shí)系統的設計和經(jīng)典面向對象思想之間的辨正關(guān)系。 設計數據層組件并在層間傳遞數據(Angela Crocker、Andy Olsen 和 Edward Jezierski) 這是另一篇討論windows體系平臺的文章。微軟的產(chǎn)品適合于小型的開(kāi)發(fā),一方面和具體的技術(shù)有關(guān),另一方面也和體系結構的設計有關(guān)。windows體系結構的特點(diǎn)是快速開(kāi)發(fā),因此在一些小型的項目中,使用微軟產(chǎn)品的開(kāi)發(fā)速度較快,但是隨著(zhù)項目規模的增大,快速開(kāi)發(fā)伴隨著(zhù)的結構性欠佳的問(wèn)題就逐漸顯露出來(lái)了。因此,文章的主要內容就是如何優(yōu)化結構。其主要的思路是對系統進(jìn)行分層,并實(shí)現層間數據傳遞的策略。這兩點(diǎn)不論是在哪一類(lèi)型的體系中都是關(guān)鍵性的問(wèn)題,在分層模式中,我們也曾經(jīng)對這兩個(gè)問(wèn)題做了大篇幅的討論。和Java體系相比,Window體系有其特殊的一面,也能夠起到他山之石的效果。 EJB Design Patterns(Floyd Marinescu)本書(shū)分為兩個(gè)部分,第一個(gè)部分重點(diǎn)討論了如何在一個(gè)分層體系中應用模式語(yǔ)言,并分別針對架構設計、數據傳輸(即上一段中討論的層間傳送數據)、事務(wù)和持久性、服務(wù)端和客戶(hù)端交互、主鍵生成策略等主題討論了可能的設計模式。第二部分討論了EJB設計過(guò)程中的實(shí)踐活動(dòng)和過(guò)程。雖然本文的所有內容都是針對EJB設計的,但是其思路同樣可以借鑒于其它體系。本書(shū)的電子書(shū)在Middleware網(wǎng)站上可以下載到。 |
聯(lián)系客服