天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁 > 論文百科 > 英文數(shù)據(jù)庫 >

軟件模塊化設(shè)計原則_軟件框架設(shè)計的藝術(shù)

發(fā)布時間:2016-11-15 14:40

  本文關(guān)鍵詞:軟件框架設(shè)計的藝術(shù),由筆耕文化傳播整理發(fā)布。


軟件框架設(shè)計的藝術(shù)----讀書總結(jié)

總結(jié) 軟件開發(fā)的藝術(shù) 理想主義,經(jīng)驗主義和無緒

文藝復(fù)興時期,現(xiàn)代科學(xué)產(chǎn)生了兩個重量級理論: 理性主義和經(jīng)驗主義。

理性主義認(rèn)為理智是信息的首要來源。給出一個假設(shè),只要通過思考就能理解和描述這個世界,如著名的伽利略自由落體實驗。

經(jīng)驗主義則認(rèn)為人類對世界認(rèn)識的主要來源是經(jīng)驗。

我們開一輛車,不必知道其內(nèi)部實現(xiàn)細(xì)節(jié)。

如果孤立地基于兩種極端的方式來觀察世界都是片面的。對大多數(shù)人來說,懵懂無知是一種生活方式,也是理性主義和經(jīng)驗主義結(jié)合在一起的結(jié)果。今天的程序開發(fā)和軟件工程方法也是如此。

軟件的演變過程

我們可以發(fā)現(xiàn)在軟件演變的過程中, 理性主義幾乎已無存身之處。

因為軟件的趨勢是: 程序員在可以不深入了解很多內(nèi)容的情況下就可以寫出非常好的代碼。

大型軟件是如何開發(fā)的

現(xiàn)狀: 開發(fā)團隊往往直接復(fù)用現(xiàn)有的一些軟件框架,完全不重視這些重量級的框架是否超過我們的需要的。現(xiàn)代軟件都是基于大型組件的方式進行組裝的。 我要一個web服務(wù)器就裝一個tomocat, 要一個數(shù)據(jù)庫就裝個mysql。 這完全是一種推土機式的開發(fā)方式,,不管你的組件有多大, 總會找到合適的推土機把他推上去。 運行效率太差 就 加內(nèi)存,搞服務(wù)器集群,

這種方法是好還是壞呢?實際上絕大多數(shù)公司已經(jīng)用這種方式了。

因為推土機式的工作方式可以使你在不關(guān)注內(nèi)部細(xì)節(jié)的情況下,也可以得到不錯的結(jié)果。 我們可以在不了解汽車原理的情況下,可以把汽車開得很好。 在寫win32程序時候,也不必了解系統(tǒng)是怎么實現(xiàn)。 我們只需要關(guān)注windows 系統(tǒng)API, 以及這些API的功能。

理解一個系統(tǒng)有兩個層面:

  • 淺層理解: 緊限于了解使用方法
  • 深層理解: 理解其原理
  • 而在軟件開發(fā)中, 一般只要做到淺層理解就可以了。

    我們說明軟件開發(fā)其實是一個經(jīng)驗的積累過程,并且可以是復(fù)用前人的經(jīng)驗積累的。

    設(shè)計API的動力之源

    好的API可以使功能的使用者聚焦在使用層面而不是其內(nèi)部細(xì)節(jié)

    為什么需要好的API:

    設(shè)計API過程中遇到的最大問題--- 不斷變化的需求

    一個軟件開發(fā)的生命周期:

    變化是萬惡之源。

    那么如何才能設(shè)計好的API 評價API好壞的標(biāo)準(zhǔn)

    第一步先確認(rèn)什么才叫好。

    很多人認(rèn)為所謂的API,不過是類和方法。但是這是比較片面的。

    強調(diào)一點, 我們?yōu)槭裁葱枰_發(fā)好的API:我們希望能夠?qū)⒋髩K的構(gòu)建模塊,”無緒“地集合成應(yīng)用程序。

    那么如何評價一個API的質(zhì)量: 漂亮? 但是評價漂亮的標(biāo)準(zhǔn)是很主觀的。我們應(yīng)該設(shè)計易于使用、廣為接受且富有成效的API。我們可以有一下幾個方面來衡量一個API的好壞。

    實現(xiàn)API的步驟

    第二步弄清楚寫API的步驟

    寫一個API有三個步驟:用例, 場景, 文檔。

    一個用例就是一種用法的描述,他指出用戶可能要面臨的問題,而這個問題不是一個具體的問題,而是很多問題的抽象。

    舉個例子

    用例: 設(shè)計一個數(shù)據(jù)庫管理器,他的功能是注冊JDBC驅(qū)動。

    場景:對用例的回答。我們把API要描述的每一個功能下列出來:

    注意一些設(shè)計原則

    第三步 學(xué)習(xí)一些設(shè)計原則和通用方法

    只公開你要公開的內(nèi)容

    我們所設(shè)計的API都會被可能誤用。幾乎所有的API設(shè)計者都會有這樣的共識:一個人API設(shè)計的時間越長,他設(shè)計的API公開的內(nèi)容會越少。

    設(shè)計API的幾種方法:

    1. 方法優(yōu)于字段

    這個不用說了。 geter setter。 這樣做會有很多改變的余地。 如計算、轉(zhuǎn)換、校驗、覆蓋

    2.工廠方法優(yōu)于構(gòu)造函數(shù)

    工廠方法會帶來很大的靈活性,三個好處:

    3. 讓所有的內(nèi)容都不可改變

    通常情況下, 在設(shè)計一個類的時候,如果不考慮讓擁有子類,那就不應(yīng)該讓這個類被繼承。 用final 來修飾。 還有些其他方案來: 不公開構(gòu)造函數(shù)轉(zhuǎn)而提供工廠方法。把大部分方法變?yōu)閒inal或者private

    4. 避免濫用setter方法

    一個寶貴的教訓(xùn): 如無必要,絕對不要再正式的API中聲明setter方法。

    5. 盡可能通過友元的方式來公開功能

    在java中,所謂的友元就是用默認(rèn)的package方式訪問,即允許同一個包內(nèi)的代碼進行訪問。

    有個實際的例子

    6. 賦予對象創(chuàng)建者更多的權(quán)利 7. 避免暴露深層次繼承

    避免深層次的繼承,定義程序的接口,并讓用戶來實現(xiàn)這些接口。 如果一個類繼承了某個類或者接口,那么就可以作為響應(yīng)的類或接口被使用。

    如在swing中, frame間接繼承了compoment,這樣就表示所有使用compoment的地方,都可以使用frame. 實際上frame繼承 compoment是為了復(fù)用compoment的代碼。這是一種典型的面向?qū)ο蟮膹?fù)用的誤用。 所以如果發(fā)現(xiàn)繼承提醒超過2層,一定要想清楚“我是在設(shè)計API還是在復(fù)用代碼”,如果是后者,則做好子類化準(zhǔn)備。

    面向接口而非實現(xiàn)進行編程

    本質(zhì)上講,這個原則倡導(dǎo)的是,當(dāng)我們寫一個函數(shù)或一個方法時,我們應(yīng)該引用相應(yīng)的接口,而不是具體的實現(xiàn)類。接口提供了非常優(yōu)秀的抽象歸納,讓我們的開發(fā)工作變得容易很多。 讓API的使用者和API的實現(xiàn)者解耦出來。

    模塊化架構(gòu)

    隨著軟件規(guī)模的增大以及功能的復(fù)雜性增加。只要代碼開始訪問其他無關(guān)模塊的內(nèi)容,那么架構(gòu)的退化不可避免。模塊化能有效變緩這種退化。

    模塊化的目的非常簡單,就是要實現(xiàn)程序中各個組成部分的松耦合。如果兩個模塊是獨立的,那兩個模塊就不需要知道對方的存在。如果兩個模塊要交互,那么他們應(yīng)該通過具有良好定義的接口來進行交互。

    聲明式編程

    聲明式編程的基本思路, 不是讓API用戶一步一步告訴程序如何做,而只是需要告訴程序他們要的結(jié)果,然后交給API去完成。聲明式編程的好處是能在較高的抽象層次來定義操作。

    比如寫一個資源管理API: API的使用者很容易找到一個方法去注冊一個功能,運行一下成功了,然后不再往下繼續(xù)找注銷的方法了。 聲明式編程就是解決這個問題的一劑良藥: 開發(fā)人員只需要聲明注冊什么,響應(yīng)的注銷和清理由系統(tǒng)完成。

    極端的意見有害無益

    最后提醒一點,任何極端的想法都是有害的,在軟件框架設(shè)計中也一樣, 有以下單不僅限幾個點:

    團隊協(xié)作

    現(xiàn)代的大型工程很少是有一個人單獨開發(fā)完成的,所以團隊協(xié)作非常重要。一下幾個點能很好幫助在大型軟件工作中完成好的API設(shè):

    以上非常簡單,但是在外面平常工作中缺少的就是執(zhí)行。

    posted @


      本文關(guān)鍵詞:軟件框架設(shè)計的藝術(shù),由筆耕文化傳播整理發(fā)布。



    本文編號:175783

    資料下載
    論文發(fā)表

    本文鏈接:http://sikaile.net/wenshubaike/mishujinen/175783.html


    Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

    版權(quán)申明:資料由用戶58bad***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com