20 | 理论六:我为何说KISS、YAGNI原则看似简单,却经常被用错?
王争
该思维导图由 AI 生成,仅供参考
上几节课中,我们学习了经典的 SOLID 原则。今天,我们讲两个设计原则:KISS 原则和 YAGNI 原则。其中,KISS 原则比较经典,耳熟能详,但 YAGNI 你可能没怎么听过,不过它理解起来也不难。
理解这两个原则时候,经常会有一个共同的问题,那就是,看一眼就感觉懂了,但深究的话,又有很多细节问题不是很清楚。比如,怎么理解 KISS 原则中“简单”两个字?什么样的代码才算“简单”?怎样的代码才算“复杂”?如何才能写出“简单”的代码?YAGNI 原则跟 KISS 原则说的是一回事吗?
如果你还不能非常清晰地回答出上面这几个问题,那恭喜你,又得到了一次进步提高的机会。等你听完这节课,我相信你很自然就能回答上来了。话不多说,让我们带着这些问题,正式开始今天的学习吧!
如何理解“KISS 原则”?
KISS 原则的英文描述有好几个版本,比如下面这几个。
Keep It Simple and Stupid.
Keep It Short and Simple.
Keep It Simple and Straightforward.
不过,仔细看你就会发现,它们要表达的意思其实差不多,翻译成中文就是:尽量保持简单。
KISS 原则算是一个万金油类型的设计原则,可以应用在很多场景中。它不仅经常用来指导软件开发,还经常用来指导更加广泛的系统设计、产品设计等,比如,冰箱、建筑、iPhone 手机的设计等等。不过,咱们的专栏是讲代码设计的,所以,接下来,我还是重点讲解如何在编码开发中应用这条原则。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了KISS(保持代码简单和易于理解)和YAGNI(你不会需要它)原则在软件设计中的实际应用。作者通过对比三种实现方式检查IP地址合法性的代码,阐述了代码行数并非简单与复杂的唯一标准。KISS原则并不以代码行数来考量简单,还要考虑逻辑复杂度、实现难度、代码的可读性等。文章指出,KMP算法虽逻辑复杂、实现难度大、可读性差,但在处理长文本字符串匹配问题时是高效的选择。然而,在大部分项目开发中,应避免过度设计,不要使用同事可能不懂的技术,不要重复造轮子,不要过度优化。YAGNI原则则强调不要去设计当前用不到的功能,不要编写当前用不到的代码。总之,KISS原则强调“如何做”,而YAGNI原则说的是“要不要做”。文章提供了如何写出满足KISS原则的代码的指导原则,以及在开发中重复造轮子和使用现成的工具类库的讨论。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(146)
- 最新
- 精选
- 小毅“不要使用同事可能不懂的技术来实现代码”这一条我觉得是可以值得商榷的~ 比如在项目中引入新技术就可能会违反这一条,我觉得关键点在于这个新技术是否值得引入?新技术是否可以在团队中得到推广? 有时候,在code review看到不理解的新技术时,其实刚好也是可以触发讨论和学习,如果只是单纯的不去使用,很容易造成整个技术团队停滞不前。
作者回复: 嗯嗯 我的意思不能为了用新技术而引入新技术 不过也没那么绝对 设计问题本来就没有绝对的对重庆更多的是弄明白道理之后 根据实际场景自己去权衡
2019-12-18428 - Ken张云忠提个疑问: 文中"所以,评判代码是否简单,还有一个很有效的间接方法,那就是 code review。",这里的code review有个前提该是团队成员的技术要有一定的水平,如果全是些初级人员,不按照面条式写代码就看起来费劲,这种代码评审就没意义了,所以前提是评审必须要有一定的内功修为.
作者回复: 你说的没错 要有大牛 不然code review就流于形式 大眼瞪小眼
2019-12-1818 - 拖鞋党副长老师,以java为例,什么样的写法可以被称为不建议使用的过于高级的语法呢
作者回复: 比如一些函数式编程语法 有人就不了解
2019-12-1969 - 盒子争哥好,想请问一个问题,文中说到不要写同事可能不懂的技术实现,这该如何权衡呢; 对于 Java 8 的 lambda 表达式,我认为这样的代码会更为直观;可是由于同事都习惯使用存储过程,Java 7 的语法糖; 是否因为团队大部分人都不使用 lambda,就应该在项目中放弃使用呢?
作者回复: 应该暂时放弃 等团队慢慢学习接受
2019-12-19105 - 一名小学生打卡~ 我觉得做项目中是不需要去重复造轮子的,但如果一个轮子特别大,但我只需要这个轮子很小的一部分内容,那是不是考虑借鉴它的思想去造个轮子呢?
作者回复: 是的 这是重复造轮子吗一个比较重要的理由
2019-12-1924 - 小先生那请问像正则表达式这样的东西是不是就没有用武之地?
作者回复: 当然不是 简单的正则表达式 大部分人都能看懂 就可以用 别整那种极端难看懂的就行 凡事都有个度 合理把握
2019-12-194 - Boogie 捷想请问一下老师对于使用正则匹配的看法,因为在平时的工作中还是会时不时看见,而且感觉确实可以省掉一些代码。
作者回复: 简单的正则表达式可以用的 不要太极端就好
2019-12-182 - 万历十五年KISS就是杀鸡别用牛刀, YAGNI就是要少而美。
作者回复: ������
2020-11-1221 - HarlanKISS :简单做 YAGNI:需要才做 但大多数设计模式都是超前设计,也许项目初期根本用不到,那是否违背这两个原则,等需要用到的时候再重构?
作者回复: 这个只能意会不能言传了
2020-09-11 - 阿狸爱JAVA@Test public void getNextsTest(){ String s = "helloWorld"; char[] chars = s.toCharArray(); int[] nexts = getNexts(chars, 10); System.out.println(nexts); } // b表示模式串,m表示模式串的长度 private static int[] getNexts(char[] b, int m) { int[] next = new int[m]; next[0] = -1; int k = -1; for (int i = 1; i < m; ++i) { while (k != -1 && b[k + 1] != b[i]) { k = next[k]; } if (b[k + 1] == b[i]) { ++k; } next[i] = k; } return next; } 这个函数的意义是啥,为啥最后输出的结果是{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}
作者回复: kmp算法,可以去看下数据结构和算法之美专栏
2020-07-29
收起评论