【譯】軟件設計中的KISS原則


 軟件設計中有很多原則,其中KISS就是一個很典型的例子,其核心思想就是“解耦,解耦,再解耦”,職責單一化,功能單一化為以后的維護和重構都會帶來極大的便利。
    我google了一下,能搜到不少關於KISS原則的文章,但是從理念的理解和具體實踐上感覺下面這篇文章說得才算比較到位,也很容易理解。(本文的行文結構也很簡單,貌似也是遵循KISS原則寫成的吧?)
    本文翻譯自Apache官方網站的“KISS Principle”
    英文原文鏈接:The Kiss Principle

KISS原則

  把一個事情搞復雜是一件簡單的事,但要把一個復雜的事變簡單,這是一件復雜的事

KISS原則是什么?

  KISS是Keep It Stupid Simple或 Keep It Simple,Stupid。

KISS原則的含義是什么?

   這個原則是我多年軟件工程中獲得成功的一個關鍵。現在的工程師和開發者們都曾經碰到的一個具有共性問題--將問題復雜化
一般來說,當開發者面對一個問題他們首先會將其拆分為可以理解的(雷濤注:功能上獨立或者完整)的一個個小的模塊,然后通過編碼實現。但是,我敢說十有八九的工程師都會出現這樣的錯誤,就是沒有將問題拆分的足夠小並且易於理解。這樣做的后果其中一方面就是以很復雜的方式去實現一個很簡單的問題,另一方面就是出現spagetthi code(雷濤注:一種高度耦合的代碼),有時原本我們認為只有在BASIC中才會出現的goto語句,在一個400-1000行的java代碼中,可能會出現一個數百行的方法。這種混亂代碼的最終結果就是當開發人員輸入代碼的時候卻發現以前的代碼存在異常。如果開發者能把問題更進一步細分,這些異常問題都可以解決得了(These exception cases would have solved if the developer had broken down the problem further.)
 

我們應該如何從KISS原則中獲益?

  • 你會以更快的速度解決更多的問題
  • 你會以很簡潔的代碼來解決很復雜的問題
  • 你能寫出高質量的代碼
  • 你能完成更大的系統並且它很容易維護
  • 你所編寫的代碼會更加靈活,易於擴展、修改或重構。並且能夠適應需求的變化
  • 你能得到比你原本想象的更多
  • 自從你將代碼變得 Stupid  Simple,你就能有機會在更加龐大的產品團隊或者項目團隊中工作

如何在工作中實踐KISS原則

    的確有些非常簡單的步驟可以遵循,但是對於有些人可能也算有些挑戰。聽起來很容易,盡量保持簡單,其實它是在說耐心,而更多的是在說你自己。
  • 保持謙虛,第一個容易產生的誤區就是總認為自己才是天才。保持謙虛你將最終實現超級天才的狀態,反之,沒有人會在乎你。盡量保持代碼的簡潔,否則你只能要求與你工作的都是天才
  • 將任務拆分成完成時間在4-12小時之間的代碼量
  • 將你所面臨的問題拆分成多個小塊。每個問題的解決需要的類的個數不應該太多
  • 盡量縮短每個方法,每個方法的代碼最多不要超過30-40行。每個方法只要負責解決一個問題就足夠了。如果在方法中需要兼容很多條件,那么你應該將這些條件拆分為更小粒度的方法。不但要盡量保持使得代碼易於月的和維護,而且同時應該能夠讓人快速的發現其中的bug。並且你應該經常重構你所編寫的代碼。
·         控制你的類不要過大,這種方法學(保持較小)同樣也被用在我們之前提到的函數方法(methods)上(Keep your classes small, same methodology applies here as we described for methods)
·         先去解決問題,再考慮編碼。很多開發人員喜歡一邊思考一邊編碼,這么做的確也沒什么錯。如果你認為自己可以在腦袋中一邊將問題拆分的足夠小,並且同時動手編碼完成這些功能的話。等待你的是今后一遍一遍又一遍的重構代碼。最終你會發現你的代碼量十分龐大並且不可控。
·         不要害怕刪除代碼。重構和重新編碼都是非常重要的兩個問題。當你遇到不存在的需求or you weren't aware of when you wrote the code to begin with you might be able to solve the old and the new problems with an even better solution.(或者在你最開始編程的時候並沒有意識到這類需求,其實你反而有可能在重構和重新編碼的過程中發現更好的途徑把新舊的問題一並解決)。如果你遵循上面兩個原則那么重寫的代碼將會變得很少,否則代碼也許會大量被重寫
·         在其它所有情況下,盡量保持代碼的簡潔,這是才是最難的行為模式,但是一旦你這么做,當你再次回頭看時你會說“我真的不能想象我以前是 怎么工作的”
 

是否有KISS的典型例子

的確有很多KISS的典型例子,我會盡量找一個權威的例子,但是在這里我想說的是:一些世界上最大的算法的代碼量總是很少的。並且通過閱讀那些代碼,我們可以很容易的理解其含義。算法的創造者,將問題簡化簡化再簡化,最后再去實現它。很多最偉大的人,(他們)並不是編碼高手,但是卻創造了偉大的代碼。

是否KISS原則只適用於JAVA代碼

  當然不是了,它適用於其它所有編程語言並且它也適用於你平常的生活。 但是這些原則卻不適用於:情感、愛情,更重要的,它也不適用於你的婚姻


免責聲明!

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



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