天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

對(duì)象設(shè)計(jì)的藝術(shù)

上周末,麥斯博在上海召開了亞太軟件研發(fā)團(tuán)隊(duì)管理年會(huì),我作為講師參與了架構(gòu)分會(huì)場(chǎng)的演講。我的演講題目正是《對(duì)象設(shè)計(jì)的藝術(shù)》。“藝術(shù)”這個(gè)詞語有些大,有點(diǎn)玄,不過我確乎希望能將設(shè)計(jì)作為一種藝術(shù),與工程結(jié)合,既注重實(shí)效,又能保證軟件的質(zhì)量,代碼的優(yōu)雅。在這次演講中,我希望能夠深層次地挖掘所謂設(shè)計(jì)的本質(zhì)。這是我的有感而發(fā)。因?yàn)樵谠O(shè)計(jì)領(lǐng)域中,前人已經(jīng)為我們總結(jié)了太多的思想、原則與模式。這些內(nèi)容汗牛充棟,很多程序員根本無法窮盡其內(nèi)容。學(xué)得越多,感覺懂得越少。而如果就這樣無知下去,自然也不利于技能的提升。因此,我嘗試著去抓住設(shè)計(jì)的某些核心價(jià)值,這就是我總結(jié)出來的七種“武器”:重用、擴(kuò)展、分離、變化、簡(jiǎn)約、一致、間接。

重用

軟件開發(fā)的最大敵人就是重復(fù)。它會(huì)導(dǎo)致重復(fù)開發(fā)、無法有效復(fù)用以及解決方案蔓延。避免重復(fù)的方法包括:保持對(duì)象的細(xì)粒度、高內(nèi)聚以及對(duì)對(duì)象的合理封裝。我們可以從方法級(jí)、類級(jí)以及模塊級(jí)提高軟件的復(fù)用性。例如,我們提取方法或類,定義輔助類,按照依賴關(guān)系劃分模塊。如下的類圖就是在JUnit Framework中利用模板方法模式實(shí)現(xiàn)部分邏輯的復(fù)用:image 擴(kuò)展

優(yōu)良的軟件結(jié)構(gòu)可以很好地支持?jǐn)U展,而不用修改源代碼。對(duì)于擴(kuò)展性而言,代表兩重含義。其一是內(nèi)部的擴(kuò)展,它不會(huì)在外部接口上增加新的功能,而僅僅是對(duì)對(duì)象職責(zé)的裝飾,或通過代理對(duì)象對(duì)其進(jìn)行控制。其二則是外部擴(kuò)展,我們可以利用繼承和組合在重用的基礎(chǔ)上,完成對(duì)象功能的擴(kuò)展。當(dāng)然,最重要的方法是利用抽象。例如,Java提供的Runnable接口,可以有效地支持多線程編程中對(duì)業(yè)務(wù)的擴(kuò)展:

class MyThreadStart implements Runnable {
     public void run()  {
        //do something
    }
}

Thread controller = new Thread(new ThreadStart());
controller.start();


分離

在構(gòu)建架構(gòu)時(shí),最重要的一個(gè)設(shè)計(jì)原則就是關(guān)注點(diǎn)分離。經(jīng)典的架構(gòu)模式例如分層模式與MVC模式正是關(guān)注點(diǎn)分離的體現(xiàn)。分離的關(guān)鍵元素是分離變與不變,其中的核心價(jià)值即SRP(單一職責(zé)原則)。同時(shí),我們?cè)诜蛛x對(duì)象之后,還要考慮它們之間的協(xié)作。下圖展示了我對(duì)分離的觀點(diǎn):image image image變化

在軟件開發(fā)中,變化是不可避免的。在分析需求時(shí),我們必須尋找變化點(diǎn)。根據(jù)我的經(jīng)驗(yàn),這些功能點(diǎn)經(jīng)常會(huì)發(fā)生變化:
1、業(yè)務(wù)規(guī)則(解決方案:規(guī)則模式)
2、算法策略(解決方案:策略模式)
3、命令請(qǐng)求(解決方案:命令模式)
4、硬件支持(解決方案:入口模式)
5、協(xié)議標(biāo)準(zhǔn)(解決方案:元數(shù)據(jù))
6、數(shù)據(jù)格式(解決方案:數(shù)據(jù)封裝)
7、業(yè)務(wù)流程(解決方案:工作流定制)
8、系統(tǒng)配置(解決方案:元數(shù)據(jù)、數(shù)據(jù)庫(kù))
9、界面表現(xiàn)(解決方案:分層模式、MVC模式)
10、外界服務(wù)(解決方案:服務(wù)外觀)

簡(jiǎn)約

保持軟件的簡(jiǎn)約,需要謹(jǐn)記兩個(gè)原則:KISS(保持軟件的簡(jiǎn)單與易用)和YAGNI(只實(shí)現(xiàn)實(shí)際需要的功能,而不要想當(dāng)然地添加功能)。如何才能簡(jiǎn)化復(fù)雜的實(shí)現(xiàn)呢?利用封裝可以隱藏復(fù)雜的實(shí)現(xiàn),利用抽象可以統(tǒng)一模型,從而消除功能的不同。作為一名架構(gòu)師,總是希望追求完美的解決方案,這是錯(cuò)誤的。許多反模式真是來源于此,例如分析癱瘓,意外的復(fù)雜度,以及貨運(yùn)崇拜(在不理解的情況下使用模式)。

一致

所謂“一致”包括接口、形式、調(diào)用與解決方案的一致。接口一致,則實(shí)現(xiàn)就可以替換;形式一致,則可以窺一斑而知全豹;調(diào)用一致,則客戶端可以透明訪問;而一致的解決方案,則是團(tuán)隊(duì)合作的基石。例如,我們可以通過使用合成模式,實(shí)現(xiàn)調(diào)用的一致:

image 間接

David Wheeler說過:“計(jì)算機(jī)科學(xué)中的大多數(shù)問題都可以通過增加一層間接性來解決。”誠(chéng)哉斯言。在軟件開發(fā)中,間接可以通過委托、抽象、協(xié)作來體現(xiàn)。間接可以降低依賴,隱藏細(xì)節(jié),簡(jiǎn)化客戶端調(diào)用。許多模式都體現(xiàn)了間接的思想,例如門面模式、調(diào)停者模式、適配器模式、策略模式以及服務(wù)定位器模式。

it知識(shí)庫(kù)對(duì)象設(shè)計(jì)的藝術(shù),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美日韩另类在线专区 | 尿孔 调教 扩张 | 啦啦啦影院视频在线看高清... | 抽插喷S骚爽去了H | 女生扒开下面 | 国偷自产视频一区二区99 | 区一区二视频免费观看 | 国产成年网站v片在线观看 国产成年人在线观看 | 伊人久久国产精品 | 91精品免费久久久久久久久 | 健身房被教练啪到腿软H | 日日噜噜噜夜夜爽爽狠狠 | 蜜臀AV999无码精品国产 | 国内精品久久久久影院男同志 | 偷上邻居熟睡少妇 | 最新国产在线视频在线 | 交换邻居波多野结衣中文字幕 | 久久香蕉国产免费天天 | 一本之道高清在线观看免费 | 亚洲国产精品天堂在线播放 | 美女扒开腿让男生桶免费看动态图 | 91国在线视频 | 偷窥美女3| 最近中文字幕MV高清在线 | 性欧美video| 99麻豆精品国产人妻无码 | 被老头下药玩好爽 | 国产成人小视频 | 九九热视频在线观看 | 曰曰夜夜在线影院视 | 偷拍自偷拍亚洲精品 | 最近的2019中文字幕国语版 | 大地影院日本韩国电影免费观看 | FREEXXX性乌克兰XXX| 韩剧19禁啪啪无遮挡大尺度 | 国产亚洲人成在线视频 | 国产成人小视频在线观看 | sm主人调教揉花蒂H SM双性精跪趴灌憋尿调教H | 综合色就爱涩涩涩综合婷婷 | 成人做视频免费 | 国产中文在线观看 |