26 | 简单设计:难道一开始就要把设计做复杂吗?
郑晔
你好!我是郑晔。
从专栏开始到现在,关于软件设计,我们已经聊了很多。在学习设计原则和模式这个部分时,我们看着每次的代码调整,虽然结果还不错,但不知道你脑子之中有没有闪过这样的疑问:
如果我的每段代码都这么写,会不会把设计做复杂了呢?
确实,几乎每个人在初学设计的时候,都会有用力过猛的倾向。如何把握设计的度,是每个做设计的人需要耐心锤炼的。所以,行业里有人总结了一些实践原则,给了我们一些启发性的规则,帮助我们把握设计的度。
我把这些原则放到这个部分的最后来讲,是因为它们并不是指导你具体如何编码的原则,它们更像是一种思考方法、一种行为准则。
好,我们就来看看这样的原则有哪些。
KISS
KISS 原则,是“Keep it simple, stupid”的缩写,也就是保持简单、愚蠢的意思。它告诫我们,对于大多数系统而言,和变得复杂相比,保持简单能够让系统运行得更好。
很多程序员都知道这条原则,然而,很少人知道这条原则其实是出自美国海军。所以,它的适用范围远比我们以为的程序员社区要广泛得多。无论是制定一个目标,还是设计一个产品,抑或是管理一个公司,我们都可以用 KISS 作为一个统一的原则指导自己的工作。
这个原则看起来有点抽象,每个人对它都会有自己理解的角度,所以,每个人都会觉得它很有道理,而且,越是资深的人越会觉得它有道理。因为资深的人通常都是在自己的工作领域中,见识过因为复杂而引发的各种问题。比如说,堆了太多的功能,调整起来很费劲这样的情况。我们在专栏前面讲过的各种问题,很多时候都是由于复杂引起的。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
软件设计中的重要原则包括KISS原则(保持简单,愚蠢)和YAGNI原则(You aren't gonna need it),它们强调在设计系统时保持简单和避免不必要的功能。另外,DRY原则(不要重复自己)也是重要的设计原则,强调消除重复,表达程序员的意图。简单设计原则提出了4条规则,包括通过所有测试、消除重复、表达程序员的意图和最小化类和方法的数量。这些原则指导着软件设计和开发过程,强调了简单性、可维护性和设计的重要性。这些原则不仅适用于软件开发,还可以指导目标制定、产品设计和公司管理。通过遵循这些原则,可以有效规避不必要的复杂性,提高系统的可靠性和可维护性。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》,新⼈⾸单¥59
《软件设计之美》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(16)
- 最新
- 精选
- 捞鱼的搬砖奇还记得老师在10X 里说过 ,“ 默认所有需求都不做,直到弄清楚为什么要做。用简单的设计,直到设计变得复杂 ”
作者回复: 哈哈,是这样的。
2020-07-2721 - monalisali很多公司的代码都是没有设计的,这种项目中所谓的“架构师”就是用最简单的3层结构,然后选一个框架实现IoC而已,项目基本没有自动化测试可言。如果项目已经开展好几年,也没人敢改了,一改就是大手术,改出问题还要担责任,只能越陷越深。。。。。。
作者回复: 唉,祖传代码一言难尽啊!
2020-07-2812 - 阳仔设计原则: KISS原则 YAGNI原则 DRY原则 简单设计原则: 通过测试 消除重复 表达意图 让类和方法最小化 这些原则看起来都挺简单,但实际操作起来真的一点也不简单,对于大多数人来说所谓的过度设计其实是个伪命题,如果他能够过度设计至少说明他掌握了这些设计原则,但是我觉得真正理解这些设计原则的可能还是比较少
作者回复: 这个总结很到位。
2020-07-276 - 行与修大道至简,知易行难,所以还是要多学习借鉴,多动手,还要有一定的悟性才行~
作者回复: 软件设计必须多多思考。
2020-07-274 - Bug? Feature!一直相信,架构是演进出来的,不可能有一蹴而就的银弹,这样的架构设计才能走的更远!
作者回复: 一个人顶多只能看到未来的轮廓,不能可能看清楚全部的,所以,要随着看到的增多,相应地对自己进行修正。
2020-11-081 - 82道理是知道,但实际上如何在新项目落地,在旧项目落地,都是一项巨大的挑战。
作者回复: 后面巩固篇中有几个落地的例子,你可以看一下。
2020-08-011 - 代码南这一专栏,是我最喜欢的,我听了多遍,每一次都有新的感悟。
作者回复: 欢迎学习其他几个我的专栏,也欢迎分享给小伙伴
2021-04-18 - escray对于大多数人来说其实是没有设计。 在对业务不是特别熟悉的情况下,估计很难一上来就按照领域驱动设计的思路建立模型,做出优雅的设计。如果能够按照 DRY 原则,或者前面的 SOLID 原则,把代码重构的漂亮一点就很好了。 YAGNI 和奥卡姆剃刀原则有点类似,中文翻译更像,“如非必要,勿增功能”,“如无必要勿增实体”。 思考题说要列举一下设计原则,我觉的有这篇里面的 KISS、YAGNI 和 DRY,加上之前的 SOLID,似乎已经足够了。 在网上找了一下,有人补充了 CARP, Composite / Aggregate Reuse Principle 组合/聚合复用原则,“组合、聚合优于继承”;还有 LOD, Law of Demeter 迪米特法则(也叫做 LKP, Least Knowledge Principle 最小值是原则)。 迪米特法则和接口隔离原则比较接近,而组合/聚合复用原则就比较像里氏替换原则的实现。2020-09-272
- 遥远的救世主不用焦虑过度设计,因为我们大多是没有设计的,还远远达不到,我想也只有先经历了过度设计,有了足够的积累,才能达到返璞归真——简单设计。2023-05-05归属地:浙江1
- Janenesome分离关注点最重要,不然就只能吃了不会解耦的亏。保持简单很重要,复杂的系统无法避免熵增,熵增只会带来混乱和灭亡。 设计得好就是正交分解,设计做得不好就是过度设计。 我之前也常说不要过度设计,可是连设计的知识都没掌握,怎么做设计都还不清晰,就去考虑过度设计,想想自己真是愚蠢噢。 还是得先全面学设计原则和实践案例,不要怕过度设计,不然怎么界定过度设计与简单设计都做不好,对人说起也没有说服力。2020-10-241
收起评论