更好的编程 | 每天都应遵循的7个软件开发原则:“KISS”、“DRY”、“YAGNI”等

软件开发的 20 条基本原则:LoD、SoC、SOLID 例如,控制器模式是纯粹的制造。“在某种程度上,开发商或架构师的成熟可以体现在他们对实现光伏发电的更广泛机制的了解不断增长,选择值得打的适当的光伏战争,以及他们选择合适的光伏解决方案的能力。该原则强调了前面讨论的分离不同对象之间职责的原则的重要性:您需要用间接来轻松地在不同实现之间切换,您需要使用信息专家来决定谁该负责满足需求,您需要在设计系统时考虑到多态性,以引入不同的可插拔解决方案等。根据语言的不同,可以通过多种方式来完成,但常见的是实现相同的接口或使用继承,特别是为不同对象的方法赋予相同的名称。 阅读详情

成为一名优秀的程序员需要技能和一些常识。关键在于务实,并知道哪种解决方案更适合你的问题。面对挑战时,有一些软件原则可以指导你选择最正确的方法。

这些是每个开发者都应该了解并时常回顾的一系列指导方针。可以把它们看作是你编程时的秘籍。

始终如一地应用这些原则会让你从中级软件工程师向高级软件工程师的过渡更加容易。你可能会发现(很可能)自己已经在凭直觉应用其中的一些原则了。

原则有很多,我们只关注最重要的7个。遵循这些原则将有助于你提升自我,成为一名更出色的程序员。

1. 你不会需要它(You Aren’t Gonna Need It - YAGNI)

这个原则简单明了,但并不是每个人都能遵守。添加代码时,要确保它是当下需要的。不要因为你觉得某些代码以后可能有用就把它们留在那里。

在进行重构时这个原则同样适用。如果你重构一个方法/类/文件,不要舍不得删除那些没用的方法。即使它们过去有用,但现在没用了。

也许有一天你又需要它们了,那时你可以通过Git仓库让它们“起死回生”。

2. 不要重复自己(Don’t Repeat Yourself - DRY)

这个概念最早由安迪·亨特(Andy Hunt)和戴夫·托马斯(Dave Thomas)在《程序员修炼之道:从小工到专家》一书中提出。

这个理念围绕着“单一事实来源”展开。这到底是什么意思呢?

“在信息系统设计和理论中,单一事实来源(SSOT)是一种构建信息模型和相关数据模式的实践,即每个数据元素只在一个地方进行管理(或编辑)……单一事实来源系统提供真实、相关且可引用的数据。”——维基百科

保持单一事实来源有助于构建更可靠、更易于理解的代码库。

代码重复是一种浪费。你需要在两个地方维护相同的逻辑,在两个地方进行测试,而且当一个地方发生变化时,你必须记得修改另一个地方。

大多数时候,代码重复是由于对系统缺乏了解。在编写任何代码之前,要务实一点:先看看周围。也许这个功能在其他地方已经实现了,也许这个业务逻辑在其他地方已经存在了。复用代码总是一个明智的选择。

3. 保持简单,傻瓜(Keep It Simple, Stupid - KISS)

这个设计原则是20世纪60年代美国海军提出的设计原则。该原则指出,更简单的系统将运行得更好、更可靠。

你会发现这个原则和20世纪70年代出现的“重新发明轮子”有很多相似之处,“重新发明轮子”曾被用作商业和广告方面的隐喻。

应用到软件开发中,它的意思就是——不要过度设计。有时候,最聪明的解决方案就是最简单的那个。用简洁的方式构建高性能、高效的代码是很棒的。

如今,最常见的错误之一就是仅仅因为新工具很炫酷就尝试使用它们。开发者不应该仅仅因为新技术是新的就有使用它们的动力,而应该是因为它们适合这项工作。

4. 预先进行大量设计(Big Design Up Front)

这种软件开发方法至关重要,但很多时候却被忽视。在开始实施之前,要确保一切都经过深思熟虑。

“很多时候,提前把事情考虑清楚能让我们在后续开发中避免严重的头痛问题……在规格说明书中做这个更改只需要一两个小时。如果我们在代码中做这个更改,可能会让项目周期增加数周。我无法更强烈地表达我对预先进行大量设计的信念了,尽管极限编程的支持者们认为这是一种禁忌。通过使用这种方法,我一直都能节省时间并开发出更好的产品,无论极限编程的狂热者们怎么说,我都为使用这种方法而自豪。在这一点上,他们就是错的,我再清楚不过了。”

——乔尔·斯波尔斯基(Joel Spolsky)

很多开发者觉得如果还没开始编码就是没有进展,这是错误的。通过制定一个具体的计划,你可以避免自己可能需要重新从头开始的情况。

有时候,设计中的缺陷需要其他人参与讨论。这种讨论越早进行,对大家越好。

一个非常常见的反对观点是,修复问题的成本比规划它们的时间要低。这肯定是不对的。用户遇到的错误/不一致性越少,他们的体验就越好。你可能没有第二次机会去抓住用户了。

5. SOLID原则

这是最著名的软件原则。SOLID是以下几个单词的首字母缩写:

S)单一职责原则(Single - responsibility principle)

它的重要性怎么强调都不为过。每个对象、类和方法都只应有一个职责。如果你的对象/类/方法做的事情太多,最终就会出现著名的“面条式代码”。下面是一个例子:

这个方法看起来没什么问题,但它做得太多了:

  • 在后端(BE)保存对象

  • 处理用户界面(UI)通知

  • 一些导航功能

另一个副作用是测试。纠缠在一起的功能更难测试。

O)开闭原则(Open - closed principle)

软件实体应该对扩展开放,但对修改关闭。我的意思是,我们不应该仅仅因为需要更多功能就重写方法/类。

继承是实现这一原则的好方法。在JavaScript中,主要通过组合来实现。

小提示:如果你修改一个实体来使其可扩展,那么你第一次就违反了这个原则。

L)里氏替换原则(Liskov substitution principle)

这个原则是指超类的对象必须能够被其子类的对象替换,并且应用程序仍应按预期工作。

I)接口隔离原则(Interface segregation principle)

这个原则是罗伯特·C·马丁(Robert C. Martin)在为施乐公司做咨询时提出的,这是一个很明显的原则。

“客户端不应该被迫依赖它们不使用的接口。”——罗伯特·C·马丁

软件应该被拆分成多个独立的部分。应尽可能减少副作用以确保独立性。

要确保你没有强迫对象去实现它们永远不需要的方法。下面是一个例子:

并不是所有动物都能飞、走或游泳,所以这些方法不应该是接口的一部分,或者应该设置为可选的。

D)依赖倒置原则(Dependency inversion principle)

这个原则的重要性再怎么强调也不为过。我们应该依赖抽象,而不是具体的实现。软件应该具有低耦合和高内聚的特性。

你不应该关心事物是如何构建的,而应该关心它们是如何工作的。一个简单的例子是在JavaScript中使用日期。你可以构建自己的抽象层。这样,如果你要更换日期提供程序,你只需要在一个地方修改,而不是在成千上万个地方修改。

有时候,构建那个抽象层需要花费一些精力,但从长远来看是值得的。

例如,date - io就创建了这样一个抽象层,使你可以与多个日期供应商一起使用。

6. 避免过早优化(Avoid Premature Optimization)

过早优化是指在还未证明优化是必要的情况下,开发者就进行不必要的优化。我认为如果你遵循KISS和YAGNI原则,就不应该陷入这种情况。

不要误解我的意思,尝试预测可能出现的问题是好的,但在深入实施细节之前,你需要检查这些优化是否真的有用。

一个非常简单的例子就是扩展。你不会因为觉得你的新应用会火就购买40台服务器。相反,你应该根据需要增加服务器。

过早优化可能会导致你的代码延迟,从而增加产品推向市场的时间成本。

很多人都认为过早优化是万恶之源。

7. 奥卡姆剃刀原则(Occam’s Razor)

“奥卡姆剃刀(Occam’s razor、Ockham’s razor、Ocham’s razor,拉丁语:novacula Occami)或简约法则(拉丁语:lex parsimoniae)是一种解决问题的原则,即‘如无必要,勿增实体’[1][2],或者更简单地说,最简单的解释通常是正确的。”——维基百科

在编程世界中这意味着什么呢?不要在不需要的时候创建不必要的实体。要务实——想想是否真的需要它们,因为它们可能最终会增加你的代码库的复杂性。

总结

这些原则并不复杂。事实上,正是它们的简单性让它们如此美妙。如果你觉得不知所措,不要担心。目前,你只需要努力提高自己的意识,并尝试一次将一个原则融入到你的日常工作中。

有一些基本但强大的原则可遵循,这将有助于你成为一名更好的程序员,并让你更清楚为什么要做这些事情。

如果你已经在凭直觉应用其中的大部分原则,那么当你明白为什么自己一直以某种方式做事时,那种顿悟的感觉是很好的。

感谢阅读。

STM32与AD7606的SPI通信优化:提升高精度数据采集效率 本文深入探讨了STM32与AD7606的SPI通信优化策略,旨在提升高精度数据采集系统的效率与稳定性。文章从硬件连接、电源去耦、PCB布局等基础环节入手,详细解析了软件驱动中SPI模式配置、DMA用及精准时序控制等关键优化技术,并提出了系统级的性能提升方案,帮助开发者解决高速采样下的数据跳动、效率瓶颈等实际问题。 阅读详情

相关推荐

抓包工具:Fiddler下载、安装、使用 教程

文章目录抓包工具:Fiddler下载、安装、使用 教程一、Fiddler 下载二、Fiddler 安装三、Fiddler 使用3、Statistics 请求的性能数据分析4、Inspectors 查看数据内容5、AutoResponder 允许拦截指定规则的请求6、Composer 自定义请求发送服务器7、Filters 请求过滤规则8、Timeline 请求响时间9、Fiddler 设置解密HTTPS的网络数据10、Fiddler 内置命令与断点 抓包工具:Fiddler下载、安装、使用 教程 Fidd

Sumarua的博客 17万+

到底该如何理解“设计“在敏捷开发中的地位?

在敏捷上下文里,"(软件)设计"是一个让很多人感觉有点困惑的话题。不同于"文档"在敏捷里的地位,因为至少敏捷宣言里有一句话提到了敏捷对"文档"的态度是怎样的,但对于"设计",却让人有点摸不着头脑。

关注软件研发 556

基于粒子群算法的配电网重构matlab程序

基于粒子群算法的配电网重构matlab程序

通俗易懂讲解 KISS/DRY/YANGI/SOLID 等程序设计原则

本文特意选取了一些简单的例子,希望帮助大家快速掌握这些设计原则的核心思想。本文的例子简单,但是实际项目代码往往情况复杂得多,不一定能一眼洞穿其中的设计问题,希望大家能够举一反三,将这些设计原则融会贯通到你写的每一行代码中。-- END --推荐阅读使用整洁架构优化你的 Gradle Module面试题:Android 的 Intent 采用了什么设计模式?Android 最新官方架构推荐引入 UseCase,这是个啥?该怎么写?

chuyouyinghe的专栏 485

【设计模式】设计原则-SOLIDDRYKISSYAGNI、LOD

修改记录 修改时间 备注 新建 2021.02.09 整理自极客时间-王争的设计模式之美(推荐购买学习) 1. SOLID原则 1.1 SRP(Single Responsibility Principle) 单一职责 1.1.1 定义:一个类或模块只负责完成一个功能。 理解:不要设计大而全的类,要设计粒度小、高性能单一的类。该原则的目的是为了实现代码高内聚、低耦合、提高代码复用性、可读性以及可维护性。 1.1.2 以下场景可能会出现类没有指责单一: 类中的代码行数、函数、属性是否过多...

主营Android,副营Flutter、前端 2495

DRY 原则--设计模式

由于代码长度的过短,实现的相关的功能过于简单,使得我们没有感觉到dry的简单性,但是当我们所实现的功能真的变的强大的时候,这样的调用方法真的很减少很多我们敲代码的数量,这样的会使得我们的代码变得简单的很多。在这个例子里面我们就去调用这个相关的函数,把这个原本该去输出两遍的这个输出的相关的函数,保证我们去调用我们实现的这个方法就会使得我们的代码调用的变得更加简练和美观。是符合某些原则的,在其他场景下就是不符合的,我们学习了dry原则,不能狭隘的。然而,并不是所有看起来相似的代码都违反了 DRY 原则

开源驱动,创造价值;坦诚清晰,快速失败;让复杂可计算。 1395

为什么敏捷对项目管理能发挥作用?

传统的“瀑布式”项目管理方法包括详细的前期计划和设计(通常称为BDUF或Big Design Up front)。功能和范围是预先确定的,时间表和相关的成本是估算的。这对于必须预先确定详细信息的建筑项目来说非常有效。 但是,对于知识工作,例如软件开发、研究项目、大多数工程项目以及涉及不确定性和高变更率的其他类型的工作,传统方法是不足的。在以变更为准则的环境中,可以根据来自新的或出乎意料的来源的信息来提高价值,这是一种更有效、更现实的管理方法。这就是敏捷的切入点。 尽管早在1986年日本就采用了类似敏捷的方

MSaaS的博客 377

深入理解设计原则KISS/YAGNI/DRY原则【软件架构设计】

KISS原则是“保持简单(Keep It Simple, Stupid)”的缩写。它是一种设计原则,旨在使设计或产品易于理解、易于使用和易于维护,同时减少复杂性和不必要的功能。这个原则可以用于各种领域,包括软件开发、网站设计、商业策略、营销和个人生活。

weixin_30197685的博客 1937

编写清晰代码的四大原则DRYKISSYAGNISOLID(含 Python 正反例)

清洁代码并不是靠“技巧”,而是靠持续做出正确的设计决策。DRY 让你少踩维护的坑KISS 让代码保持清晰YAGNI 防止系统臃肿SRP 保证结构健康这些原则不是教条,而是写代码时的“思考框架”。这是否真的让代码更简单、更清晰了?

Harry的博客 1137

软件开发的核心原则

本文主要介绍了软件开发的多种核心原则,包括 DRY(不要重复自身)、KISS(保持简单)、YAGNI(只包含必需功能)、避免过早优化、完成胜于完美、选择最合适的等,还阐述了 SOLID 原则、奥卡姆剃刀、得墨忒耳定律、测量两次切割一次、最小惊讶原则等。这些原则能帮助开发者构建可靠高效的软件系统,实现工程目标。

SAP学习成长之路的博客 1704

kiss原则包括什么_编程之美:九大设计原则SOLIDKISSDRYYAGNI、LOD

前言想写出优雅、健壮、易读、维护性好,跟诗一样的代码并不是一件容易的事,但也并不是无路可寻,遵循以下九大原则,多多实践,自然会向着诗一样的方向前进;SOLIDSOLID并不是一个设计原则,而是五个设计原则的合称;1.S - 单一职责Single Responsibility Principle:单一职责原则一个类、一个模块或者是一个方法的职责该是单一的;如果同时承担了两个责任,那么当其中一个需要...

weixin_28871885的博客 920

5分钟了解软件开发的20项基本原则

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。这一原则强调了前面讨论过的在不同对象之间分离责任的原则的重要性:需要通过间接依赖来轻松的在不同实现之间切换,需要通过信息专家来决定谁该负责满足需求,需要在设计系统时考虑到多态性,以引入不同的可插拔解决方案,等等。抽象与封装是相辅相成的,封装是一种隐藏被抽象部分的实现的方法。

残星说梦话 935

三条你必须知道的软件开发原则

前言 在本文中将介绍3条重要的软件开发原则,你可能已经知道,也可能只知道其中一条。这些原则看似很简单,但实施起来会很难。无论如何,这些原则提供了一个管理复杂软件项目的强大的途径。当涉及到真实世界中的项目开发时,你会发现这些原则都是非常有用的。 原则1:不要重复自己(Don’t Repeat Yourself,DRY原则) 这个原则非常重要,换言之,就是不要写重复的代码。 当你正在构建一个大型的软件项目时,你通常会被整体复杂性搞得不知所措。解决复杂性的最基本的策略是将系统分成若干个容易处理的部分。起初

AlbenXie的博客 694

【C++代码整洁之道】第三章 原则

KISS原则YAGNI原则DRY原则,信息隐藏原则,高内聚原则,松耦合原则,小心优化原则,PLA原则,童子军原则

shuaixio的博客 929

编程进阶知识】《探秘软件开发设计七大原则:打造高质量代码的法宝》

本文详细介绍了软件开发和设计中的七大原则,即 SOLID 原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则、迪米特法则和合成/聚合复用原则。同时还提及了其他在软件开发中同样重要的设计原则,如 KISS 原则YAGNI 原则DRY 原则和 CQRS 原则。通过清晰的阐述和生动的例子,帮助读者理解这些原则的含义和价值,以便在实际开发中运用这些原则提高代码的可维护性、灵活性和可扩展性。读者阅读本文后,将掌握一系列实用的设计原则,能够更好地进行软件设计和开发,提升代码质量。

Dylaniou的博客 1289

软件开发的20条重要原则:LoD、SoC、SOLID及更多

软件设计原则软件开发的基础。作为一名软件工程师,你可以在你的工作工具、语言、框架、范式和模式中找到它们。它们是“好”代码和“可读”代码的核心支柱。一旦你理解了它们,你会发现它们无处不在。能够看到并用这些原则的技能是区分一个好工程师和一个差工程师的标志。没有任何一个框架或工具能够在你不理解基本原理的情况下提高你的代码质量;更重要的是,没有这些基本原理,你就会成为那个工具的俘虏。这篇文章不是参考指南,而是我尝试系统化列出需要时常刷新记忆的核心原则

qq_28791753的博客 2257

3条必须知道的实用软件开发原则

在一个完美的用程序中,每一小块业务逻辑将被封装在一个表征中,也就是一个变量或一个类。变量被封装在一个能够被描述为一个职责表征的类中,类被封装在一个能被描述为功能表征的组件中。起初,你可能想将系统按组件划分,每个组件代表了一个子系统,其中包含了完成特定功能所需的一切。DRY 原则规定,在整个系统中,每一个小的知识块只可能发生一次,且每个知识块必须有一个单一、明确、权威的表征。定义它代表什么,并确定你知道它在组件中的作用。●绘制软件架构图,并映射主要的组件,复杂的项目可能需要为每个组件绘制一个专门的架构图。

ZCYS2023的博客 998

软件设计基本原则

YAGNI原则向投机取巧和过度设计宣战,它的主旨是希望你不要写目前用不上,但将来也许会需要的代码。KISS:Keep it simple and stupid.(保持简单和直接原则)对于程序员来说,关注简单性可能是最困难的事情之一,并且这是一个终生的学习经验。总是在你需要的时候再实现它们,而不是在你只是预见到你需要它们的时候实现它们。建议:在你确定真的有必要的时候再写代码,那时再重构仍然来得及。任何事情都该尽可能简单,而不是稍微简单一点。

jamin_liu_90的博客 490

第 41 章 - Go语言 软件工程原则

在软件工程中,有一些广泛接受的原则和最佳实践,它们帮助开发者构建更易于维护、扩展和理解的代码。本章将介绍几个重要的原则SOLIDDRY(Don’t Repeat Yourself)、KISS(Keep It Simple, Stupid)等,并通过Go语言的例子来展示如何用这些原则

hummhumm的专栏 1245

【译】架构设计原则

【译】架构设计原则 设计用场景 通用 KISS原则(保持简单愚蠢) YAGNI原则 做最简单的事可能有效 关注点分离 保持DRY 站在维护者角度撸码 避免过早优化 童子军规则 模块间/类 最小化耦合 得墨忒耳定律 组合优于集成 正交 稳健性原则 控制反转 模块/类 最大化内聚 里式替换原则 开放/封闭原则 单一责任原则 隐藏实施细节 科里定律 封装变...

iamdll的专栏 397

软件设计26丨简单设计:难道一开始就要把设计做复杂吗?

今天,我给你讲了一些启发性的编程原则,这些设计原则更像是一种思考方式,让我们在软件设计上有更高的追求:KISS 原则,Keep it simple, stupid,我们要让系统保持简单;YAGNI 原则,You aren’t gonna need it,不要做不该做的需求;DRY 原则,Don’t repeat yourself,不要重复自己,消除各种重复。我们还讲了一个可以指导我们实际工作的简单设计原则,它有 4 条规则:通过所有测试;消除重复;表达出程序员的意图;让类和方法的数量最小化。

qq_53280238的博客 814
上一篇: 面试题:如何在数十亿用户中高效检查用户名是否存在
下一篇: 埃隆·马斯克的 AI 初创公司 xAI 推出了 API
Qingmu2024
博客等级 码龄9年 947粉丝 25原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qingmu2024

您的鼓励是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值