天天躁日日躁狠狠躁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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产手机在线视频 | 第一福利在线永久视频 | 国产综合欧美区在线 | 草草久久久无码国产专区全集观看 | 精品无码无人网站免费视频 | 国产亚洲精品AV麻豆狂野 | 特级做A爰片毛片免费69 | 欧美成a人片免费看久久 | 伊人久久中文字幕久久cm | gay台湾无套男同志xnxⅹ | 蜜桃臀无码内射一区二区三区 | 嫩草影院永久在线一二三四 | 78m成人亚洲 | 亚洲成人精品久久 | 极品少妇高潮啪啪AV无码吴梦梦 | 迈开腿让我看下你的小草莓声音 | 亚洲精品无码不卡 | 美女全光末满18勿进 | 超碰视频在线观看 | 亚洲精品沙发午睡系列 | 久久婷五月综合色啪首页 | 囯产精品久久久久久久久免费蜜桃 | 国厂精品114福利电影 | 全是肉的高h短篇列车 | 国产在线精品视亚洲不卡 | 99久久免热在线观看 | 啪啪漫画无遮挡全彩h网站 啪啪漫画无遮挡全彩h同人 | 99RE6这里只有精品国产AV | 久久人妻熟女中文字幕AV蜜芽 | 被爽到叫呻呤视频免费视频 | 亚洲精品不卡视频 | 伊人色综合久久天天 | 里番※琉璃全彩acg奈亚子 | 芭乐草莓樱桃丝瓜18岁大全 | 97精品国产亚洲AV高清 | jizz老太婆 | 大香伊人久久精品一区二区 | 射漂亮黑b丝女 | 暖暖的视频完整视频免费韩国 | 浪荡受自我调教纯肉BL | 国产亚洲精品欧洲在线视频 |