單一項原則

2022-01-23 02:34:23 字數 1260 閱讀 5627

單一項原則真的很有用,特別是用於找出問題的根源.

上週改乙個bug,bug的現象是:

在火狐中,開啟介面(當然是公司產品的介面,不便給出位址),點選導航項時,除了開啟導航的模組,同時會開啟乙個空白的頁面.

我是怎麼解決這個bug的呢?

我找到導航的那段**,以及相應的事件處理的js,copy到乙個簡單的html頁面中.

如下:

功能介紹

首先,我想到的是要在火狐上重現.於是很容易地重現了.

然後我就試圖找原因,不斷的嘗試,因為就這個簡單的頁面,沒有其他因素的干擾,所以很快就找到了原因和解決方法.

注意:以上的bug在chrome中無法重現,必須在火狐中才能重現.

請問,我為什麼不深入產品的**中去找原因呢?

(1)如果使用產品的**找原因,首先我得讓它在我本機執行起來,光搭建環境就很費勁,麻煩!

(2)不便於測試,因為產品的**很多,功能模組多,比較龐大,重新整理一下頁面就得兩三秒,問題是大部分資源的請求與這個bug一毛錢關係都沒有;

(3)干擾因素比較多,不確定是這個模組的問題,還是那個模組抽筋.而我把關鍵**抽出來,思路就很清晰了,影響的因素就只有乙個了.這就是我要說的單一項原則.

單一項原則,核心思想就是無論在什麼情況下,都必須保證只有乙個因素在影響,或者說只有乙個變數.必須是一次方程,不是二次方程(初中數學裡面的).

x+3的結果就只與x有關,如果它的結果增加了10,我們就能夠確定是x增加了10,因為它的結果只與x有關係.

x+y+3的結果同時與x,y有關,如果它的結果增加了10,我們無法判斷是x的影響還是y的影響,抑或是x,y共同作用的結果.

之前不知道在**(知乎?)看過一篇文章說的好像是關於"最強大腦"(呂飛龍用聲音吹破玻璃杯)的,說這個人可以通過口吹氣把玻璃杯吹破 ,表演時第一次沒有成功,他要求再試一次,並且提出用自己的手拿著玻璃杯.有乙個教授站出來不同意他用手接觸玻璃杯,解釋說如果他用手接觸玻璃杯的話,就會對結果有干擾.

到底是吹破的,還是捏破的呢?

因為有兩個因素,所以不確定是哪個在起作用.所以這是不符合單一項原則的.但是現場的嘉賓竟然同意了呂飛龍的(扯淡的)要求,唉,真理經常站在少數人一邊.那個正直的教授竟然被人罵....

總結:我們在思考問題的時候,也要充分利用單一項原則,這樣我們的思路就會豁然開朗,也更容易抓住主要(關鍵)因素.

陣列刪除一項 物件刪除一項

經常用到,記一筆 var jone var skills vue react angular jquery bootstrap delete jone.輸出 var jone delete skills 1 輸出skills vue empty,angular jquery bootstrap 其中...

單一職責原則

定義 不要存在多於乙個導致類變更的原因。通俗的說,即乙個類只負責一項職責。問題由來 類t負責兩個不同的職責 職責p1,職責p2。當由於職責p1需求發生改變而需要修改類t時,有可能會導致原本執行正常的職責p2功能發生故障。解決方案 遵循單一職責原則。分別建立兩個類t1 t2,使t1完成職責p1功能,t...

單一職責原則

單一職責原則 乙個類,只有乙個引起它變化的原因。應該只有乙個職責。每乙個職責都是變化的乙個軸線,如果乙個類有乙個以上的職責,這些職責就耦合在了一起。這會導致脆弱的設計。當乙個職責發生變化時,可能會影響其它的職責。另外,多個職責耦合在一起,會影響復用性。例如 要實現邏輯和介面的分離。對於user類,裡...