前言
最近在編寫設(shè)計文檔時,參考《代碼大全》,其中有很多觀點(diǎn)值得參考??梢愿鶕?jù)一些設(shè)計點(diǎn)反思自己的設(shè)計是否足夠完善。
看完后,了解到設(shè)計有兩個重點(diǎn):
- 設(shè)計越簡單越好
- 模塊越清晰,越可分離越好
軟件設(shè)計
作為開發(fā)人員,不應(yīng)該試著一次性將大量程序塞進(jìn)自己的大腦。一個時刻可以專注于一個特定的部分,考慮得才會越精細(xì)、透徹。軟件設(shè)計目標(biāo):將系統(tǒng)分解為多個子系統(tǒng),子系統(tǒng)間相互依賴越少越好。保持子程序的短小精悍有助于減少思考的負(fù)擔(dān)。有句話叫做:程序是給人看的,順便給電腦運(yùn)行的。設(shè)計也是一樣,要設(shè)計出讓人接收起來沒有那么多負(fù)擔(dān)的代碼設(shè)計。
在對模塊進(jìn)行劃分的時候,其實(shí)也是對模塊進(jìn)行抽象的過程。抽象就是用簡化的觀點(diǎn)來考慮復(fù)雜的概念。模塊的內(nèi)部實(shí)現(xiàn)方式不對外公開,外部只需要知道一些接口,即可進(jìn)行交互。
設(shè)計也有多種模塊,比如抽象工廠、適配器、組合等等,可以參考書籍《設(shè)計模式》。
理想的設(shè)計特征
- 最小的復(fù)雜度。做出簡單而且易于理解的設(shè)計。
- 易于維護(hù)。設(shè)計出能夠容易閱讀的系統(tǒng)和代碼。
- 松耦合度。通過抽象、信息隱藏等原則,減少子系統(tǒng)間的關(guān)聯(lián)。關(guān)聯(lián)越少,集成、測試、維護(hù)工作量也會少。
- 可移植性。方便移植到其他系統(tǒng)。
- 精簡性。設(shè)計出的代碼,對于要實(shí)現(xiàn)功能,每行代碼都是必需大的,保持閱讀和功能的情況下,代碼量最少。
如何開啟設(shè)計
- 創(chuàng)建中央控制點(diǎn)。對于每一段有用的代碼,只有一個唯一的地方可以看到它,并可以被控制在模塊中。
- 為測試而設(shè)計。為了能夠更有效地測試每個模塊內(nèi)容,就容易產(chǎn)生更規(guī)整的接口。
- 畫一個圖。在更高的抽象模式上表達(dá)問題。
- 嘗試使用多種設(shè)計方案,嘗試設(shè)計的可能性越多,最終設(shè)計方案越好。
軟件設(shè)計規(guī)則
- 是否分解得足夠,系統(tǒng)->子系統(tǒng)->組件->子程序。子系統(tǒng)負(fù)責(zé)根據(jù)上層設(shè)計完成詳細(xì)的功能。
- 程序中不應(yīng)該有環(huán)形關(guān)系。即A依賴B,B依賴C,C又依賴A模塊。環(huán)形模塊會讓系統(tǒng)變得復(fù)雜,難以測試和維護(hù)。
- 模塊間的交互關(guān)系,是否已經(jīng)設(shè)計為最小化了。
- 是否有助于最小化偶然性。