軟體設計的基本原則

來源:互聯網
上載者:User

(1) dot not repeat yourself
 在兩個或者多個地方發現相似的代碼的時候,我們需要把它們的共性抽象出來,形成一個唯一的方法,然後改變現有地方的代碼讓他們以合適
 的參數調用這個新方法。

 

(2) Program to an interface,not an implement
 設計模式中的重要思想,注重介面,而不是實現,依賴介面而不是實現。

 

(3) command - query
 查詢:當一個方法返回一個值回應一個問題的時候,它就是查詢的性質。
 命令:當一個方法要改變對象的狀態的時候,它就是命令性質。
 在設計介面時候保證介面的單一化,保證方法的行為為嚴格的命令或者查詢。

 

(4) principle of least Knowledge 最少知識原則
 對於對象o 中的方法m ,m 只能訪問如下對象的方法
 1,對象0。
 2,與o直接相關的Component object。
 3,由方法M建立或者執行個體化的對象。
 4,作為方法M的參數對象。
 final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
 這麼長的一串對其它對象的細節,以及細節的細節,細節的細節的細節……的調用,增加了耦合,
 使得代碼結構複雜、僵化,難以擴充和維護。

 

(5) Single Responsibility Principle 職責單一原則
 其核心的思想是:一個類,只做一件事,並把這件事做好,其只有一個引起它變化的原因。
 單一職責原則可以看作是低耦合、高內聚在物件導向原則上的引申。
 
(6) Open/close Principle   開閉原則
 關於開發封閉原則,其核心的思想是:模組是可擴充的,而不可修改的。也就是說,對擴充是開放的,而對修改是封閉的。
 對擴充開放,意味著有新的需求或變化時,可以對現有代碼進行擴充,以適應新的情況。
 對修改封閉,意味著類一旦設計完成,就可以獨立完成其工作,而不要對類進行任何修改。
 
(7) Dependency Inversion Principle (DIP) – 依賴倒置原則
 高層模組不應該依賴於低層模組的實現,而是依賴於高層抽象。
 舉個例子,牆面的開關不應該依賴於電燈的開關實現,而是應該依賴於一個抽象的開關的標準介面,這樣,
 當我們擴充程式的時候,我們的開關同樣可以控制其它不同的燈,甚至不同的電器。
 這就好像瀏覽器並不依賴於後面的web伺服器,其只依賴於HTTP協議。這個原則實在是太重要了,社會的分工化,
 標準化都是這個設計原則的體現。

(8) Hollywood Principle – 好萊塢原則
 好萊塢原則就是一句話——“don’t call us, we’ll call you.”。意思是,好萊塢的經紀人們不希望你去聯絡他們,
 而是他們會在需要的時候來聯絡你。也就是說,所有的組件都是被動的,所有的組件初始化和調用都由容器負責。
 組件處在一個容器當中,由容器負責管理。
 簡單的來講,就是由容器控製程序之間的關係,而非傳統實現中,由程式碼直接操控。這也就是所謂“控制反轉”的概念所在:
 1.不建立對象,而是描述建立對象的方式。
 2.在代碼中,對象與服務沒有直接聯絡,而是容器負責將這些聯絡在一起。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.