這樣寫代碼,你的年薪也能翻一倍!
點擊藍字 關(guān)注我們
工作時間久了,當我們已經(jīng)能夠熟練掌握日常業(yè)務(wù)的時候,大家就會想去追求更高的層次。這里也總結(jié)了幾條大家在日常工作中經(jīng)常遇到一些問題:
項目經(jīng)過多次迭代,各種代碼都堆砌在一起,定位線上 Bug 的時候,感覺就像在玩“大家來找茬”;
產(chǎn)品經(jīng)理口中的一個小需求,要在無數(shù)地方小心翼翼地進行各種微調(diào),還被產(chǎn)品經(jīng)理嫌棄改得慢
辛辛苦苦寫好的代碼,被別人在其他地方不經(jīng)意地修改,給弄崩潰了;
其實引發(fā)這些問題的根本原因還是在于軟件設(shè)計。
如何做出一份完美的軟件設(shè)計?答案是不可能的,因為就不存在所謂的完美設(shè)計,最好的設(shè)計都是結(jié)合業(yè)務(wù)本身設(shè)計的。但遵循以下幾大軟件設(shè)計原則,做出優(yōu)秀的軟件設(shè)計也并非難點。
單一職責原則
簡稱SRP,總結(jié)來說,它只負責完成一個職責或者功能。不要設(shè)計大而全的類,要設(shè)計粒度小、功能單一的類。單一職責原則是為了實現(xiàn)代碼高內(nèi)聚、低耦合,提高代碼的復(fù)用性、可讀性、可維護性。
通俗理解就是:不管干啥,它都只干一件事,你叫它去買菜,它就只買菜,叫它順便去倒個垃圾,它就不干了,脾氣就這么拽。
開閉原則
簡稱OCP,當項目需求變動時,在不修改源代碼前提下,通過增加新類/新方法/新模塊等方式滿足新的需求。
開閉原則可以說是編程中最基本,最重要的設(shè)計原則。大家耳熟能詳?shù)脑O(shè)計模式目的都是為讓程序(架構(gòu))能遵循開閉原則,它是面向?qū)ο蟪绦蛟O(shè)計的終極目標,要求程序(架構(gòu))既要擁有一定的適應(yīng)性和靈活性,又要具備穩(wěn)定性和延續(xù)性。
里氏代換原則
簡稱LSP,子類在繼承父類時,不要改變父類原有的功能。
它的核心是定義了什么是父子,就像游戲規(guī)則一樣。定義后讓大家遵守,會讓大家的程序在后面越來越復(fù)雜的時候也能清晰,而不會越來越亂。
依賴倒轉(zhuǎn)原則
簡稱DIP。要面向接口編程,不要面向?qū)崿F(xiàn)編程。總的來說,它可以降低類間的耦合性、提高系統(tǒng)的穩(wěn)定性、減少并行開發(fā)引起的風險以及提高代碼的可讀性和可維護性。
接口隔離原則
簡稱ISP,一個類對另外一個類的依賴性應(yīng)當是建立在最小的接口上的;客戶端程序不應(yīng)該依賴它不需要的接口方法(功能)。
根據(jù)它來拆分接口時,首先必須滿足單一職責原則。使用多個專門的接口,而不使用單一的總接口,即客戶端不應(yīng)該依賴那些它不需要的接口。
迪米特法則
簡稱LoD,它的核心觀念就是創(chuàng)建松耦合的類。講究一個軟件實體對其他實體的引用越少越好,或者說如果兩個類不必彼此直接通信,那么這兩個類就不應(yīng)當發(fā)生直接的相互作用,而是通過引入一個第三者發(fā)生間接交互。這樣,當一個模塊修改時,就會盡量少的影響其他的模塊,擴展會相對容易。
合成復(fù)用原則
簡稱CRP,它就是指在一個新的對象里通過關(guān)聯(lián)關(guān)系(包括組合關(guān)系和聚合關(guān)系)來使用一些已有的對象,使之成為新對象的一部分;新對象通過委派調(diào)用已有對象的方法達到復(fù)用其已有功能的目的。簡言之:要盡量使用組合/聚合關(guān)系,少用繼承。
以上7條設(shè)計原則,基本上都是大神們經(jīng)過很多次血的教訓(xùn),總結(jié)出來的一套方法論。可以給大家在實際的軟件設(shè)計過程中,提供一些思路。
當然在前文就說了,沒有完美的設(shè)計。所以設(shè)計都是在具體應(yīng)用中結(jié)合實際的業(yè)務(wù)場景進一步思考,怎么讓系統(tǒng)變得更加可靠,開發(fā)更加迅速,代碼閱讀起來更加輕松,關(guān)鍵在于靈活運用!
關(guān)注我們,做好軟件設(shè)計
