架構收藏必備:架構設計的六大原則


架構收藏必備:架構設計的六大原則

文章篇幅較長,建議收藏慢慢看

單一職責原則

There should never be more than one reason for a class to change.

譯文:永遠不應該有多於一個原因來改變某個類。

理解:對於一個類而言,它所對外的作用域,應該是清晰明瞭,並且在限定範圍內。簡單來說,每一個類,都有自己的責任範圍,該做什麼不該做什麼,這個類應該是界限清晰的。像現在的一個團隊裡面,各司其責,互相關聯但是又職責明確。這樣子的設計,有點類似於領域驅動設計。

設計:現在很多都是三層架構,基本上已經固定要做什麼,但是同時也是需要我們自己設計一些類,這時候我們在進行設計的時候有個界限原則,就是這個類裡面的方法,是否都在這個類的管轄範圍內,如果不是,就要考慮分成兩個或者三個,例如我們新建一個類DateUtils,專門用來處理時間,那裡面寫入了處理Http的方法,此時就要考慮職責,用句俗話來說就是:專業的人做專業的事。

架構收藏必備:架構設計的六大原則

開放封閉原則

Software entities like classes, modules and functions should be open for extension but closed for modifications.

譯文:軟件實體,如:類、模塊與函數,對於擴展應該是開放的,但對於修改應該是封閉的。

理解:每一個類,都是一個固有的個體,裡面集成了各類數據及操作方法,對外可以進行拓展或者組合,但是儘可能不要去修改。

設計:這個設計是非常好,但是又有弊端。

優點:我們所做的系統,是不斷根據需求來的,一代又一代的開發者不斷對系統進行修改,最大的問題就是不敢動原先的代碼,此時我們需要做的是採用繼承或者組合的方式來形成新的需求功能。

缺點:但是如果這樣子,有一個很重要的問題,就是代碼會越來越臃腫,最終每個人都看不懂。

我想,重構很多時候就是用來解決這種問題,從需求重新開始梳理開始對業務進行重構。

架構收藏必備:架構設計的六大原則

里氏替換原則

Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.

譯文:使用基類的指針或引用的函數,必須是在不知情的情況下,能夠使用派生類的對象。

理解:權責問題,子類可以擴展父類的功能,但不能改變父類原有的功能。

設計:有三點

1、子類可以實現父類的抽象方法,但是不能覆蓋父類的非抽象方法

2、子類中可以增加自己特有的方法,當功能擴展時,子類儘量不要重寫父類的方法,而是另寫一個方法

3、當子類覆蓋或實現父類的方法時,方法的前置條件(即方法的形參)要比父類方法的輸入參數更寬鬆

架構收藏必備:架構設計的六大原則

最少知識原則

Only talk to you immediate friends.

譯文:只與你最直接的朋友交流。

理解:一句話高內聚,低耦合,這是我們一直追求但是追求不到的東西,天道一樣一樣的。

應用:在做系統設計中,如果兩個類或者對象之間不必彼此直接通信,那就不要聯繫了,老死不相往來最好。如果要聯繫,一般做法是引入一箇中間介質或者第三方對象,來承擔這些聯繫,像我們的service層。

架構收藏必備:架構設計的六大原則

接口隔離原則

The dependency of one class to another one should depend on the smallest possible interface.

譯文:一個類與另一個類之間的依賴性,應該依賴於儘可能小的接口。

理解:保證接口的職責,儘可能不要引入無用的方法,讓使用者明確接口作用。

應用:做接口設計的時候,接口極可能的進行細化,最好是一個接口對應一個功能模塊,同時接口裡面的方法應該儘可能的少,使接口更加輕便靈活,有點類似與service層的接口設計。

架構收藏必備:架構設計的六大原則

依賴倒置原則

High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.

譯文:高層模塊不應該依賴於低層模塊,它們應該依賴於抽象。抽象不應該依賴於細節,細節應該依賴於抽象。

理解:其實這個說起來抽象,但是簡單來理解的話就是要做接口編程,不要依賴具體實現。

設計:在做設計中,儘可能設計接口吧,用接口去對外進行數據溝通,spring的本質就是告訴我們,要這樣子做。

架構收藏必備:架構設計的六大原則

將以上六大原則的英文首字母拼在一起就是 SOLID(穩定的),所以也稱之為 SOLID 原則。

這個原則是給我們參考的,在做設計的時候,一定要因地制宜,千萬不要生搬硬套,一定要變通,過度設計是非常可怕的存在,切記切記。


--END--

作者:溪雲閣

原創作品,抄襲必究,轉載請註明出處

部分圖片來源網絡,如侵權請聯繫刪除,謝謝!


分享到:


相關文章: