架構設計中的幾項原則

2021-06-01 13:28:40 字數 1703 閱讀 3151

架構設計中的幾項原則

做個筆記:

dip——dependency inversion principle依賴倒置原則:

1、高層模組不應該依賴於低層模組,二者都應該依賴於抽象。

2、抽象不應該依賴於細節,細節應該依賴於抽象。

高層模組包含了乙個應該程式中的重要的策略選擇和業務模型,正是這些高層模組才使得其所有的應用程式區別於其他,如果高層依賴於低層,那麼對低層模組的改動就會直接影響到高層模組,從而迫使它們依次做出改動。

ocp——open-closed principle開關原則:

software entities(classes,modules,functions,etc.) should be open for extension, but closed for modification。

軟體實體應當對擴充套件開放,對修改關閉,即軟體實體應當在不修改(在.net當中可能通過**模式來達到這個目的)的前提下擴充套件。

open for extension:當新需求出現的時候,可以通過擴充套件現有模型達到目的。    

close for modification:對已有的二進位制**,如dll,jar等,則不允許做任何修改。

isp簡介(isp——inte***ce segregation principle)介面分離原則:

使用多個專門的介面比使用單一的總介面要好。

乙個類對另外乙個類的依賴性應當是建立在最小的介面上的。

乙個介面代表乙個角色,不應當將不同的角色都交給乙個介面。沒有關係的介面合併在一起,形成乙個臃腫的大介面,這是對角色和介面的汙染。

「不應該強迫客戶依賴於它們不用的方法。介面屬於客戶,不屬於它所在的類層次結構。」這個說得很明白了,再通俗點說,不要強迫客戶使用它們不用的方法,如果強迫使用者使用它們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

srp簡介(srp——single-responsibility principle)單一職責原則:

就乙個類而言,應該只專注於做一件事和僅有乙個引起它變化的原因。

所謂職責,我們可以理解他為功能,就是設計的這個類功能應該只有乙個,而不是兩個或更多。也可以理解為引用變化的原因,當你發現有兩個變化會要求我們修改這個類,那麼你就要考慮撤分這個類了。因為職責是變化的乙個軸線,當需求變化時,該變化會反映類的職責的變化。

「就像乙個人身兼數職,而這些事情相互關聯不大,,甚至有衝突,那他就無法很好的解決這些職責,應該分到不同的人身上去做才對。」

lsp簡介(lsp——liskov substitution principle)liskov替換原則:

定義:如果對於型別s的每乙個物件o1,都有乙個型別t的物件o2,使對於任意用型別t定義的程式p,將o2替換為o1,p的行為保持不變,則稱s為t的乙個子型別。

子型別必須能夠替換它的基型別。lsp又稱黎克特制替換原則。

對於這個原則,通俗一些的理解就是,父類的方法都要在子類中實現或者重寫。

rep簡介:the release reuse equivalency principle 重用發布等價原則:

重用粒度等價於發布粒度。也就是說,乙個為重用目的而設計的發布單位裡,不能包含不可重用的元素;如果包含了不可重用的元素,它將變得不可重用。

crp簡介:common reuse principle共同重用原則:

乙個包中的所有類應該是共同重用的。如果重用了包中的乙個類,那麼就要重用包中的所有類。相互之間沒有緊密練習的類不應該放在同一包裡。

架構設計原則

電腦科學領域的任何問題都可以通過增加乙個間接的中間層來解決。實現功能性需求是當前的明確地,非功能性需求是應對未來未知需求 架構是系統非功能性需求的解決辦法的集合 架構設計的目的基礎是滿足功能需求,主要是滿足一下特性 高效能 可用性 可靠性 可擴充套件性 穩定性 安全性 易用性 可維護性 靈活性 實現...

架構設計原則

知乎 馮慶 常見架構設計方案質量屬性點有 效能 可用性 硬體成本 專案投入 複雜度 安全性 可擴充套件性等。在評估這些質量屬性時,需要遵循架構設計原則 1.合適原則,2簡單原則,避免貪大求全,基本上某個質量屬性能夠滿足以 一定時期業務發展就可以了。屬性 集群方案 拆分方案 備註 效能 中,繼續擴充套...

軟體架構 設計原則

一般乙個系統包括架構模式 設計模式 軟體框架等。一般乙個系統包括架構模式 設計模式 軟體框架等。設計模式是在解決問題的過程中,一些良好思路的經驗整合,常見的是gof 23種設計模式。gof 23種設計模式的一些指導設計原則 1 開閉原則 ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。抽象化 是...