前言
最近在對(duì)公司的一個(gè)已有客戶(hù)端進(jìn)行bug的修復(fù)以及功能的擴(kuò)展開(kāi)發(fā)。很不愉悅的一件事情是,當(dāng)看到一個(gè)很小很小的bug,例如Label的背景顯示出問(wèn)題了,Label的字體大小不符合文檔要求,我們最直接的想法應(yīng)該就是找到這個(gè)Label的相關(guān)代碼段,進(jìn)行一兩處代碼的修改應(yīng)該就能簡(jiǎn)單完事了。然而就是這么簡(jiǎn)單的bug,我至少修改了十幾處代碼!十幾處!十幾次?。。。ㄖ匾氖虑橹v三遍?。┰蚴鞘裁茨??無(wú)疑是代碼抽象層次太低,復(fù)制粘貼代碼太多!太多!太多了!
淺談軟件體系結(jié)構(gòu)與軟件設(shè)計(jì)模式
在《軟件體系與設(shè)計(jì)》一書(shū)中,軟件體系結(jié)構(gòu)定義如下:軟件體系結(jié)構(gòu)意指“軟件的整體結(jié)構(gòu)和這種結(jié)構(gòu)為系統(tǒng)提供概念完整性的方式”;設(shè)計(jì)模式定義如下:設(shè)計(jì)模式描述了在某一個(gè)特定場(chǎng)景與可能影響模式應(yīng)用和使用方式的“影響力”中解決某個(gè)特定設(shè)計(jì)問(wèn)題的設(shè)計(jì)結(jié)構(gòu)。眾所周知的,當(dāng)下常用的設(shè)計(jì)模式有MVC,MVVM,MVP等,MVC已經(jīng)是個(gè)老生常談的設(shè)計(jì)模式了,現(xiàn)在也在逐步被其他設(shè)計(jì)模式,例如MVVM,MVP所替代。這幾個(gè)設(shè)計(jì)模式具體是什么,有什么不同,我就不說(shuō)了,谷歌,百度一下,一搜會(huì)有一大堆的文章介紹這些模式,畢竟是當(dāng)下流行的東西。各位看客在這里只需要簡(jiǎn)單知道,雖然軟件的規(guī)模越來(lái)越大,程序越來(lái)越復(fù)雜,MVC已經(jīng)不能滿(mǎn)足要求了,為了進(jìn)一步降低耦合度,開(kāi)發(fā)出更加高質(zhì)量的程序就不能再繼續(xù)使用老牌的MVC了。一個(gè)良好的設(shè)計(jì)模式,可以有利于我們開(kāi)發(fā)出結(jié)構(gòu)清晰,后期利于長(zhǎng)期維護(hù)以及功能擴(kuò)展的軟件,也有利于在開(kāi)發(fā)過(guò)程中快速構(gòu)建開(kāi)發(fā)軟件。
模塊化
除了要有良好開(kāi)發(fā)模式,另外一個(gè)不得不談的就是模塊化。所謂模塊化,可以理解化一個(gè)簡(jiǎn)單的構(gòu)件,這個(gè)構(gòu)件可以是一個(gè)圖形的組件,或者一個(gè)處理數(shù)據(jù)邏輯的單元。比如一個(gè)圖片輪詢(xún)播放的組件,或者是一個(gè)處理網(wǎng)絡(luò)請(qǐng)求的庫(kù)。最簡(jiǎn)單的理解應(yīng)該是模塊與模塊之間應(yīng)該是相互獨(dú)立,信息隱蔽,高聚合度,低耦合度,只通過(guò)簡(jiǎn)單接口進(jìn)行交互的。
抽象
要想模塊化就必須要學(xué)會(huì)抽象。一個(gè)抽象可以簡(jiǎn)單理解為只單純負(fù)責(zé)處理一件事情的方法、類(lèi)或者過(guò)程函數(shù)。一個(gè)理解抽象時(shí)機(jī)的簡(jiǎn)單方法是,如果你在寫(xiě)代碼的時(shí)候還在使用復(fù)制粘貼,或者還在一處又一處的碼著重復(fù)的代碼,那么你就該思考一下你有沒(méi)有必要把重復(fù)的地方抽象成一個(gè)函數(shù),或者一個(gè)類(lèi)了。
最后一言
不要復(fù)制粘貼代碼!不要復(fù)制粘貼代碼!不要復(fù)制粘貼代碼!即使你學(xué)不會(huì)什么是模塊化,什么是設(shè)計(jì)模式,什么是軟件體系結(jié)構(gòu),起碼也要懂得起碼那么一丁點(diǎn)的抽象好么?。≌?qǐng)不要做一個(gè)耿直的把代碼擼了一遍又一遍的人!