当前位置: 首页>編程日記>正文

【译】软件设计中的KISS原则

【译】软件设计中的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代码

当然不是了,它适用于其它所有编程语言并且它也适用于你平常的生活。 但是这些原则却不适用于:情感、爱情,更重要的,它也不适用于你的婚姻


https://www.fengoutiyan.com/post/14575.html

相关文章:

  • KISS原则
  • 软件设计遵循的原则
  • 软件设计6原则
  • KISS模型
  • 具体译法和抽象译法
  • 应用软件升级原则
  • 软件系统设计基本原则
  • 软件设计的原则有哪四个
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機