讀書有感--------軟件的設計原則


任何傻瓜都可以寫出計算機能懂的代碼,但好的程序員可以寫出人類能懂的代碼-----Martin Fowler


 如果你是新手,你可能會問,為什么代碼需要設計原則?

我想說的是肯定不是為了故作高深,存在即是合理,

如果寫了一個簡單的程序,你可能不需要設計原則,

如果你寫了一個復雜的,但是之后再也不會改,那么你也不需要,

但是現實生活中,基本上的軟件系統有一定復雜度,而且都在不斷的修改。

所以我們需要寫出一個不僅讓機器看懂,還能夠讓人類看懂的代碼。

讓人類能看懂的代碼即是可維護性代碼,它包含兩個核心原則:高內聚、低耦合。

一個有助於實現高內聚低耦合的原則是關注點分離Separation of Concerns(SOC),關注點是軟件功能的不同部分,像業務邏輯或者表現方式,

SOC是關於把系統分解成不同的可能沒有重疊的特性,比如盡量將業務邏輯放在領域層,而不是一部分放在存儲過程,一部分放在UI。

后來這些原則得到進一步的完善和強化,大師Robert  C. Martin給出了5個更有效,更具體和可實施的原則,即比較流行的SOLID原則。

  1. 單一職責(SRP)

    類應該盡可能簡單,專注於一個核心任務,

  2. 開閉原則(OCP)

    即對擴展開放,對修改關閉

  3. 里氏替換原則(LSP)

    子類可以替換他們的基類

  4. 接口分離原則(ISP)

    接口隔離原則解決的是接口臃腫的問題,建議保持接口最低限度的函數

  5. 依賴反轉原則(DIP)

         即高級模塊不應該依賴於低層模塊,二者都應該依賴於抽象,什么意思呢,

         比如說你在開發asp.net MVC, Controller里需要訪問某個服務或者數據庫層,最好不要直接在controller里直接引用相關的實現類,

         而應該引用相關的服務和持久層的抽象,一般是相應的接口,通用的做法是使用IOC組件來做這個事情,如Unity,Autofac等。

除此以外,還有一些比較實用的原則:

      1.DRY(Don't  Repeat Yourself)

      2.說,別問(Tell,Don't Ask)

       總的來說,這是對象建模的啟蒙原則,就OOP而言,創建軟件實體可以包含數據並暴露某些行為,

       意思是你在實現某個功能的時候,避免請求數據並在某個外圍邏輯容器里處理,

        舉個例子,比如一個訂單聚合根,計算訂單的價格只需要通過聚合根內的一個方法獲取就好了,不需要你在訂單聚合根意外的別的其他地方獲取訂單項再重新計算一遍了。

      3.KISS(keep It Simple,Stupid)

       法國詩人曾說,完美不是沒有東西可以增加,而是沒有東西可以減少,在軟件開發里,是為了防止過渡設計的情況發生。

      4.YAGNI(You Ain't Gonna Need It)

      這個原則認為實現需求上沒有提到的任何功能都是有問題的,即在你認為自己可能需要而不是實際需要時實現一個函數可能會給你帶來一些潛在的問題。

說了這么多如何寫出好的代碼?

寫出好的代碼,不是每個人天生就會的,他需要一個過程,一個重構的過程,

實際工作上,重構是每天都會發生的,你重構代碼不是因為他不工作了,而是為了更好的實現某些非功能性需求,

如可讀性,可維護性,可測試性或可擴展性,或者為了提高性能。

常見的重構操作:

  1. 提取方法
  2. 提取接口
  3. 封裝字段
  4. 重命名
  5. 使用新的組件代替舊的組件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM