7種設計壞味道
1.僵化性: 很難對系統進行改動,因為每個改動都會迫使許多對系統其他部分的其它改動。
2.脆弱性: 對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。
3.牢固性: 很難解開系統的糾結,使之成為一些可在其他系統中重用的元件。
4.粘滯性: 做正確的事情比做錯誤的事情要困難。
5.複雜性(不必要的): 設計中包含有不具任何直接好處的基礎結構。
6.重複性(不必要的): 設計中包含有重複的結構,而該重複的結構本可以使用單一的抽象進行統一。
7.晦澀性: 很難閱讀、理解。沒有很好地表現出意圖。
11種原則 - principle
----類原則
1.單一職責原則 - single responsibility principle(srp)
就乙個類而言,應該僅有乙個引起它變化的原因。
(職責即為「變化的原因」。)
2.開放-封閉原則 - open close principle(ocp)
軟體實體(類、模組、函式等)應該是可以擴充套件的,但是不可修改。
(對於擴充套件是開放的,對於更改是封閉的.
關鍵是抽象.將乙個功能的通用部分和實現細節部分清晰的分離開來.
開發人員應該僅僅對程式中呈現出頻繁變化的那些部分作出抽象.
拒絕不成熟的抽象和抽象本身一樣重要. )
3.黎克特制替換原則 - liskov substitution principle(lsp)
子型別(subclass)必須能夠替換掉它們的基型別(superclass)。
4.依賴倒置原則(iocp) 或 依賴注入原則 - dependence inversion principle(dip)
抽象不應該依賴於細節。細節應該依賴於抽象。
(hollywood原則: "don't call us, we'll call you".
程式中所有的依賴關係都應該終止於抽象類和介面。
針對介面而非實現程式設計。
任何變數都不應該持有乙個指向具體類的指標或引用。
任何類都不應該從具體類派生。
任何方法都不應該覆寫他的任何基類中的已經實現了的方法。)
5.介面隔離原則(isp)
不應該強迫客戶依賴於它們不用的方法。
介面屬於客戶,不屬於它所在的類層次結構。
(多個面向特定使用者的介面勝於乙個通用介面。)
----包內聚原則
6.重用發布等價原則(rep)
重用的粒度就是發布的粒度。
7.共同封閉原則(ccp)
包中的所有類對於同一類性質的變化應該是共同封閉的。
乙個變化若對乙個包產生影響,
則將對該包中的所有類產生影響,
而對於其他的包不造成任何影響。
8.共同重用原則(crp)
乙個包中的所有類應該是共同重用的。
如果重用了包中的乙個類,
那麼就要重用包中的所有類。
(相互之間沒有緊密聯絡的類不應該在同乙個包中。)
----包耦合原則
9.無環依賴原則(adp)
在包的依賴關係圖中不允許存在環。
10.穩定依賴原則(sdp)
朝著穩定的方向進行依賴。
應該把封裝系統高層設計的軟體(比如抽象類)放進穩定的包中,
不穩定的包中應該只包含那些很可能會改變的軟體(比如具體類)。
11.穩定抽象原則(sap)
包的抽象程度應該和其穩定程度一致。
(乙個穩定的包應該也是抽象的,乙個不穩定的包應該是抽象的. )
----其它擴充套件原則----
12.bbp(black box principle)黑盒原則
多用類的聚合,少用類的繼承。
13.dap(default abstraction principle)預設抽象原則
在介面和實現介面的類之間引入乙個抽象類,這個類實現了介面的大部分操作.
14.idp(inte***ce design principle)介面設計原則
規劃乙個介面而不是實現乙個介面。
15.dcsp(don't concrete supperclass principle)不要構造具體的超類原則
避免維護具體的超類。
16.迪公尺特法則
乙個類只依賴其觸手可得的類。
介面設計原則
在概要設計階段,根據需求階段的調研結果,我整理了系統介面設計的基本原則。因為在 開發階段,很多時候介面的具體製作室由開發人員直接寫 因此必須確定一定的原則和規範,以保證系統介面的統一。一般適用原則 b s架構使用原則 螢幕適應 web頁面需要適應不同使用者螢幕大小。瀏覽器相容 需要適應不同瀏覽效果,...
WEB介面設計原則
進入與退出編輯模式通常應該採用同樣的互動風格。這樣才有助於發現相反的操作,而就是所謂的對稱 互原則。如果頁面中有乙個字段需要編輯,應該優先使用單字段行內編輯 對於多個欄位或更複雜的編輯,可以使用多欄位行內編輯 如果編輯時的上下文無關緊要,或者使用者在編輯時應該全神貫注,則使用覆蓋層編輯 對於網格編輯...
API 介面設計 原則
api 設計乙個非同步介面實踐 知乎 介面設計的16個原則 accident web api介面設計經驗總結 hugejihu9的專欄 csdn部落格 聊聊restful 介面設計篇 一 就浩這口 csdn部落格 api 介面設計問題 獲取所有資料 和 獲取我的資料 介面是分開的嗎 v2ex wha...