Lesson-10 S.O.L.I.D五大原則

S.O.L.I.D五大原則 雖然對我不陌生 但是他們的JS實現(xiàn)我沒怎么思考過,今天看湯姆大叔的博客,然后加以總結(jié), 當(dāng)然不是說這五大原則就是真理 你需要根據(jù)你的項目的真實情況加以使用

  1. The Single Responsibility Principle(單一職責(zé)SRP)
  2. The Open/Closed Principle(開閉原則OCP)
  3. The Liskov Substitution Principle(里氏替換原則LSP)
  4. The Interface Segregation Principle(接口分離原則ISP)
  5. The Dependency Inversion Principle(依賴反轉(zhuǎn)原則DIP)

單一職責(zé)

這個怎么說呢,就是每個函數(shù)或者類擁有相對單一的職責(zé),怎么做呢,這個沒有辦法一概而論,我個人理解就是第一步要邏輯上說的通,就是不能一聽就是錯的,比如食堂的大師傅在做飯的同時不能還要負責(zé)擦地一樣。
第二個要做的就是盡量把邏輯和數(shù)據(jù)拆開,這樣外面只需要修改數(shù)據(jù)而不需要觸碰到邏輯
第三個就是盡量吧相關(guān)邏輯封裝到一起,比如我們有個邏輯用到計算,那么我們可以把所有的計算邏輯抽離出來行成一個新的計算類

開閉原則

軟件實體(類,模塊,方法等等)應(yīng)當(dāng)對擴展開放,對修改關(guān)閉,即軟件實體應(yīng)當(dāng)在不修改的前提下擴展。
我自己粗淺的理解就是 不能因為添加了新的邏輯 就必須把以前 的代碼都要改一下, 比如 我的類增加了一種Type 我們?nèi)绻途托枰砑右粋€ else if 其實是不好的 因為這樣第一是把所有類型的邏輯都寫到了一起 其次是可能要修改多處
而我想到解決方式就是子類話 然后實現(xiàn)不同的接口 這樣的話 當(dāng)邏輯變化的時候 我們只需要新建一個類就好了

里氏替換原則

派生類型必須可以替換它的基類型。
這個我其實不是特別理解,那么我就先從繼承的角度來說一下,但是其實大神們告訴我們不要繼承 要使用組合, 這個之后再說
從繼承的角度講,我認為有兩點

  • 子類必須能繼承父類的所有邏輯,如果只想繼承部分代碼,需要把父類再次抽象
  • 即使是重寫了父類的方法,也不能使存在的邏輯發(fā)生變化,簡單來說,父類有開門 關(guān)門倆方法,但是子類重寫了開門,但是當(dāng)調(diào)用關(guān)門方法,門是不能被關(guān)上的 ,所以子類也許還需要重寫關(guān)門方法

大神告訴我們
盡量使用對象組合而不是類繼承
里氏替換原則(LSP)的本質(zhì)不是真的和繼承有關(guān),而是行為兼容性。
當(dāng)然這又涉及了另一個原則 合成復(fù)用
而我的理解就是當(dāng)你需要基類的方法的時候 可以試著不去繼承 而是選擇擁有一個基類的對象作為屬性 然后讓他幫助你實現(xiàn)功能 當(dāng)然這些需要你視情況而定

接口分離原則

不應(yīng)該強迫客戶依賴于它們不用的方法。
不太理解 不過簡單來說就是一個類不能擁有他不需要的方法或者屬性

依賴倒置原則

高層模塊不應(yīng)該依賴于低層模塊,二者都應(yīng)該依賴于抽象
抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)該依賴于抽象

我的簡單理解就是 不管高級模塊和低級模塊是怎么樣的 我們都必須設(shè)計一個他們倆交流的接口 這個接口是不能改變的 這的之后不管他們怎么修改邏輯 都不會想影響對方 這個就是按接口編程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容