GithubHelp home page GithubHelp logo

solid's Introduction

為什麼需要SOLID

  • 比起23種設計模式,設計原則適用性更加廣泛,也較容易入門學習,SOLID是眾多設計原則之中最有名的一個設計原則
  • 設計原則與設計模式都是經過時間考驗後的程式設計師所寫下,遵從設計原則可以讓程式碼容易維護及擴展,反之則會難以維護,不容易擴展
  • 設計原則並非不可以違反,而是普遍來說容易維護和擴展,也有可能你的場景下不用過度設計,設計與開發效率的trade-off需要經驗的累積

各章節內容

S : 單一責任原則 Single Responsibility Principle

- 小、小、小,一個函數、一個類別只做一件事,當你因為一個以上的原因修改某個函數和類別時,表示該函數/類別,應該要被拆開了

- 搭配例子 - [相關係數分析] 分析數值變數和目標變數的相關係數,並畫出barh,從一個大函數拆成三個小函數

O : 封閉修改,開放擴充原則 Open-Closed Principle

- 對修改關閉,對擴充開放,找出經常改的地方,把他隔離出來,就像python的sort可以傳入一隻函數來調整怎麼排序一樣

- 搭配例子 - [深度學習的實驗分析] 輸入實驗名稱並畫出3-fold loss, accuracy vs epoch

L : 里氏替換原則 Liskov Substitution Principle

- 子類應當可以完全替代父類的行為,如果不行,意味著該類別的使用方法要進行類別判斷,使維護成本提高,建議重新設計類別

- 方法的輸入參數及輸出值的型態也需要一致,減少未來莫名的bug產生

- 搭配例子 - [類別使用分析] 以User及Admin的停用操作,列出相關貼文兩個功能舉例,說明如何重新設計類別,讓類別使用方法更順暢

I : 接口隔離原則 Interface Segregation Principles

- 接口中的單一責任原則,不要給使用者他不會用到的方法,乾淨的接口有助於長久維護,減少殭屍方法

- 搭配例子 [使用者屬性檢查] 以使用者是否為新訪客的檢查為例,與其傳入整個response,事實上僅需傳入cookie即可,不需要整個response

D : 依賴倒置原則 Dependency Inversion Principle

- 當高階模組與低階模組之間變動頻繁時,容易互相影響,一個壞掉另一個也不能動,此時可以學習sklearn的Pipeline哲學,Transformer依賴於Pipeline,training行為也依賴於Pipeline,方便新增修改刪除

- 搭配例子 [網頁分析] 以測試網頁中對各域名統計為例,若Server無法連外網,則需要一個LocalPage的類別,兩者皆依賴於HNWebPage類別

安裝

conda create --name solid python=3.6

conda activate solid

pip install -r requirements.txt

參考資料

solid's People

Contributors

yltsai0609 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.