前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >架构师应该遵守的编程原则

架构师应该遵守的编程原则

作者头像
芋道源码
发布于 2022-08-29 04:08:44
发布于 2022-08-29 04:08:44
26000
代码可运行
举报
文章被收录于专栏:芋道源码1024芋道源码1024
运行总次数:0
代码可运行

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

来源:www.biaodianfu.com/principles

-of-programming.html


程序员拥有一个较好的编程原则能使他的编程能力有大幅的提升,可以使其开发出维护性高、缺陷更少的代码。以下内容梳理自StactOverflow的一个问题:编程时你最先考虑的准则是什么?

KISS(Keep It Simple Stupid)

KISS原则是英语 Keep It Simple, Stupid 的首字母缩略字,是一种归纳过的经验原则。KISS 原则是指在设计当中应当注重简约的原则。总结工程专业人员在设计过程中的经验,大多数系统的设计应保持简洁和单纯,而不掺入非必要的复杂性,这样的系统运作成效会取得最优;因此简单性应该是设计中的关键目标,尽量回避免不必要的复杂性。

这个首字母缩略词根据报导,是由洛克希德公司的首席工程师凯利·约翰逊(U-2 、SR-71等的设计者)所创造的。虽然长久以来,它一直是被写为 “Keep it simple, stupid”,但约翰逊将其转化成 “Keep it simple stupid”(无逗号),而且这种写法仍然被许多作者使用。词句中最后的 S并没有任何隐涵工程师是愚蠢的含义,而是恰好相反的要求设计是易使人理解的。

说明这个原则最好的实例,是约翰逊向一群设计喷射引擎飞机工程师提供了一些工具,他们所设计的机具,必须可由一名普通机械师只用这些工具修理。因此,“愚蠢”是指被设计的物品在损坏与修复的关联之间,它们的难易程度。这个缩写词已被美国军方,以及软件开发领域的许多人所使用。

另外相类似的概念也可作 KISS原则的起源。例如“奥卡姆剃刀”,爱因斯坦的“一切尽可能简单”、达芬奇的“简单是最终的复杂性” 、安德鲁·圣艾修伯里的“完美不是当它不能再添加时,它似乎是在它不能被进一步刮除时实现的”。

有两种软件设计方法,一种是尽可能的简单并保证没有什么缺陷。另外一种方式是尽可能的复杂并保障没有什么缺陷。而第一种方式相比第二种更加困难。

保持简单(避免复杂)永远是你应该做的第一件事,简单的代码不仅写起来简单、不容易出Bug,还易于维护。简单规则下,还包括:

  • Don’t Make Me Think:如果一段程序对于阅读者来说需要花费太多的努力才能理解,那它很可能需要进一步简化。
  • 最少意外原则:程序代码应尽可能的不要让阅读者感到意外。也就是说应该遵循编码规范和常见习惯,按照公认的习惯方式进行组织和命名,不符常规的编程动作应该尽可能的避免。

如何把Kiss原则应用到工作中?

  • 谦虚, 不要认为自己是个天才,这是你第一个误解。只有谦虚了,你才能真正达到超级天才的水平,即使不行,who cares!你的代码那么stupid simple,所以你不需要是个天才!
  • 将你的任务分解为4-12小时的子任务
  • 把你的问题拆分成多个小问题。每个问题用一个或者很少的几个类来解决掉。
  • 保持你的方法足够小 ,每个方法永远不要超过30-40行代码。每个方法都应该只处理一个小小的问题,不要搞太多uses case进去。如果你的方法中有多个分支,尝试把他们拆分成多个小的方法。这样不仅容易阅读和维护,找bug也更快。慢慢的你将学会爱。
  • 让你的类也小点,原则和上面的方法是一样的。
  • 先解决问题 ,然后开始编码。不要一边编码,一边解决问题。这样做也没什么错,但你有能力提前把事情切分成多个小的块,然后开始编码可能是比较好的。但也请你不要害怕一遍遍重构你的代码。另外行数还不是为了衡量质量的标准,只是有个基本的尺子而已。
  • 不要害怕干掉代码。重构和重做 是两个非常重要的方面。如果你遵循上面的建议,重写代码的数量将会最小化,如果你不遵循,那么代码很可能会被重写。
  • 其他的任何场景,都请你尝试尽可能的简单,simple ,这也是最难的一步,但一旦你拥有了它,你再回头看,就会说,之前的事情就是一坨屎。

参考链接: Do The Simplest Thing That Could Possibly Work: http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

DRY(Don’t Repeat Yourself)

DRY即Don’t repeat

ourself(不要重复你自己,简称DRY),或一个规则,实现一次(One rule, one place)是面向对象编程中的基本原则,程序员的行事准则。旨在软件开发中,减少重复的信息。DRY的原则是“系统中的每一部分,都必须有一个单一的、明确的、权威的代表”,指的是(由人编写而非机器生成的)代码和测试所构成的系统,必须能够表达所应表达的内容,但是不能含有任何重复代码。当DRY原则被成功应用时,一个系统中任何单个元素的修改都不需要与其逻辑无关的其他元素发生改变。此外,与之逻辑上相关的其他元素的变化均为可预见的、均匀的,并如此保持同步。

我对DRY的理解:

  • 尽可能的减少重复,如代码重复、文档重复、数据重复、表征重复、开发人员重复(相同的功能不能的开发人员的优自己的实现)
  • 不重复造轮子,能够使用开源的解决方案的情况下没有必要再实现一遍。
  • 重复的事项,尽可能的使用自动化程序解决。
  • 不要过于优化,过度追求DRY,破坏了程序的内聚性。

相关规则有: 代码复用:http://en.wikipedia.org/wiki/Code_reuse

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/

YAGNI – You ain’t gonna need it

YAGNI 是You Ain’t Gonna Need It(你不会需要它)的简写,是极限编程的关键原则。YAGNI意思非常简单:仅在您真正需要它们时才去做,而不是在您认为或预见将来可能需要它们时就提前做了!

您可以将YAGNI视为即时制造的拥护者。在这种情况下,制造业正在编写代码并交付功能。只有当有人真的需求功能存在时,您才可以开始工作并创建它。否则,您将保持自己的懒惰!

它为什么如此重要?没有编写的每一行代码都是时间,因此可以节省金钱。但是,甚至更多!它是:

  • 更少的代码维护
  • 更少的代码测试
  • 事情发生变化时更少的代码可重构
  • 更多时间用于更重要的功能
  • 更多时间用于文档编制

而且还包括:

  • 节省了编译/移植的时间
  • 节省了测试运行的时间
  • 生成时/运行时节省了资源
  • 不必以某种方式保留的知识

它可以防止什么?如今,大多数软件开发都是根据客户的需求进行的。无论您是在产品公司,在提供开发服务的公司还是在其他地方工作。总是会在某处某人想要具有某个功能。是您的客户要求具有某个需求的功能,还是产品经理响应客户的反馈的功能。无论实际驱动者是谁,无论是早晚,这都是实际需求的体现。您正确预见未来功能请求的机会非常低。因此,您很有可能实现某些功能,而不是您的实际利益相关者想要的功能。过早地执行某些操作很可能会导致一切都被丢弃。这是一个没人真正喜欢的场景!然后,有时会发生另一种情况:没有人真正需要该功能!

Code For The Maintainer

为维护者编写程序。比如让代码有自解释的功能。在你编写代码的时候永远记得将来需要维护他。

参考链接: Code For The Maintainer:http://wiki.c2.com/?CodeForTheMaintainer

Be as lazy as possible.

人类因“偷懒”而进步。懒惰只是创造了需求。需求本身并不算进步。满足需求形成了进步。

偷懒还包括:

  • 不要重复发明轮子
  • 过度优化是万恶之源

参考链接: Do The Simplest Thing That Could Possibly Work: http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html

Programming is only the road, not the way.

编码只是一种实现方式,而不是解决方案。编码只是告诉电脑应该如何去做。要编写高效、可靠的软件需要精通算法、最佳实践等其他与变成相关的内容。

编程前需要先了解你要解决的问题是什么。编程只是手段并不是目的。能实现并不代表需要实现。知道什么时候不需要编程或没有必须要去编程。

If you are in a hurry, stroll along slowly. If you really are in a hurry, make a detour.

如果你很忙,那就放慢速度。如果你真的很忙,那就先放一放。这听起来很愚蠢,但是千万不要让自己陷入会导致后期问题的妥协。如果你正在编写程序的核心部分,尽可能保证精确。如果你在编写离核心代码较远的方法,可以尽可能的加快速度。

Know your path, Neo.

知道你的实现路径,你需要了解你每天使用的环境、工具及其他依赖的内容,并且把它调试到适合自己的配置。如果你的编程环境真的很好,那么你编程中的基本不需要关心他。如果你需要完成一项任务,最好的方式是不要引进“新的内容”,只有当你完全掌握“新的内容”的时候再去考虑引入。

If it wasn’t tested, it is broken.

如果没有经过测试的代码都是不能运行的。

与程序沟通时分辨原因和结果,与人交流时要分辨事实和观点

相关的准则,包括:

  • 最小化耦合关系 :代码片段(代码块,函数,类等)应该最小化它对其它代码的依赖。这个目标通过尽可能少的使用共享变量来实现。
  • 最大化内聚性 :具有相似功能的代码应该放在同一个代码组件里。
  • 开放/封闭原则 :程序里的实体项(类,模块,函数等)应该对扩展行为开放,对修改行为关闭。换句话说,不要写允许别人修改的类,应该写能让人们扩展的类。
  • 单一职责原则 :一个代码组件(例如类或函数)应该只执行单一的预设的任务。
  • 隐藏实现细节 :隐藏实现细节能最小化你在修改程序组件时产生的对那些使用这个组件的其它程序模块的影响。
  • 笛米特法则(Law of Demeter) — 程序组件应该只跟它的直系亲属有关系(例如继承类,内包含的对象,通过参数入口传入的对象等。)

原文链接:What do you consider the 1st principle(s) of programming? http://programmers.stackexchange.com/questions/91527/what-do-you-consider-the-1st-principles-of-programming 参考链接:Programming Principles https://github.com/webpro/programming-principles



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、RedisMongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
文章有帮助的话,在看,转发吧。谢谢支持哟 (*^__^*
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
程序员能力提升:你应该知道的那些编程原则!!
每个程序员都可以从理解编程原理和模式中受益。这篇概述用于我个人参考,同时我也把它放在这。也许这在设计、讨论或复查中对你有所帮助。但请注意,这还远远不够,你常常需要在相互矛盾的原则之间做出权衡。
小明互联网技术分享社区
2021/02/26
3490
设计模式之其他原则
YAGNI 跟 KISS 说的是一回事吗?YAGNI 原则的英文全称是:You Ain’t Gonna Need It。直译就是:你不会需要它。这条原则也算是万金油了。当用在软件开发中的时候,它的意思是:不要去设计当前用不到的功能;不要去编写当前用不到的代码。实际上,这条原则的核心思想就是:不要做过度设计。
acc8226
2022/05/17
3140
工程师必须知道的几个原则
校验密码和校验账号的两个函数有重复的逻辑。也就是有重复的逻辑,但是也不是重复的代码
袁新栋-jeff.yuan
2021/12/07
2170
[温故知新] 编程原则和模式
做好一个项目是人力、产品、业务、技术、运营的结合,可能还叠加一点时机的因素,就我们码农而言,工作就是搬砖,实现产品, 给业务提供支撑。 “给祖传代码加 BUG 修 BUG”,“拿起键盘一把梭”这些戏谑程序员的话,听多了真的会让程序员麻木,仿佛大家都是这么干的。 从业多年,堆过 shi 山,接手过祖传代码, 已经不能沉下气去查看、调试 shi 山代码, 说实话,很累。 本人一直推崇写流畅、自然、可自解释的代码,让优雅成为一种习惯, 给自己留个念想、给后人留个好评。
有态度的马甲
2020/06/24
3640
日拱一卒 | 设计模式之美 | 04 设计原则
所以后续的设计模式之美会比较偏向笔记风格,课程中的实战篇也不会写出来,感兴趣的可以自行查看原文章。
被水淹没
2023/02/25
3650
日拱一卒 | 设计模式之美 | 04 设计原则
.NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
模式通常是指那些在一些相同的领域和上下文内,解决同样的问题。所以一定要结合具体的使用场景去了解设计模式
郑子铭
2022/01/04
1870
.NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
程序设计原则
软件也像人一样,具有生命力,从出生到死亡,会经历多种变化。软件架构设计也不是一蹴而就的,是不断地演进发展。每个程序员都可以从理解编程原则和模式中受益。
BUG弄潮儿
2021/11/12
4560
程序设计原则
设计模式:面向对象的设计原则下(ISP、DIP、KISS、YAGNI、DRY、LOD)
本文继续来介绍接口隔离原则(ISP)和依赖倒置原则(DIP),这两个原则都和接口和继承有关。文章最后会简单介绍几个除了 SOLID 原则之外的原则。
oec2003
2021/12/13
4830
一些软件设计的原则
以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则。相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一个好的程序员通常由其操作技能、知识水平,经验层力和能力四个方面组成。在这里想和大家说说设计中的一些原则,我认为这些东西属于长期经验总结出来的知识。这些原则,每一个程序员都应该了解。但是请不要教条主义,在使用的时候还是要多多考虑实际情况。其实,下面这些原则,不单单只是软件开发,可以推广到其它生产活动中,甚至我们的生活中。
黑光技术
2019/03/06
1.2K0
开工!聊一聊一些设计原则!
大家好,我是光城,很久没发文章了,主要是工作上比较忙,希望大家理解,期待大家留言区交流,本节分享SOLID原则与抽象三原则。
公众号guangcity
2021/11/17
2530
我总结的30条架构原则
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
2820
软件架构设计的6大原则
1. 单一职责原则(Single Responsibility Principle - SRP)
Java帮帮
2019/07/25
1.6K0
全栈工程师15年经验分享:40个改变编程技能的小技巧
最近,这样一份「心得」火了。这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文——「40 Tips that will change your coding skills forever」,获得3.5k点赞。
量子位
2020/07/21
4140
全栈工程师15年经验分享:40个改变编程技能的小技巧
前端的设计模式系列-基本原则
二十三个经典的设计模式已经过完了 ,这里再把一些基本原则过一下,以便平时开发中可以更好的体会。
windliang
2022/08/20
2280
前端的设计模式系列-基本原则
软件设计的原则
了解设计模式的朋友们,想必都听说过“六大设计原则”吧。其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的。所以在学习设计模式之前,很有必要对这些设计原则先做一下了解。
用户7657330
2020/08/14
6770
15 年编程经验,总结出了 40 个改变编程的小技巧!
最近,这样一份「心得」火了。这位名叫Kesk Noren的软件工程师在Medium上分享了一篇博文——「40 Tips that will change your coding skills forever」,获得3.5k点赞。
用户8983410
2021/09/19
6510
Apache 架构师总结的 30 条架构原则
本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是 Apache Axis2 项目的联合创始人,也是 Apache Software 基金会的成员。他是 WSO2 流处理器(wso2.com/analytics)的联席架构师。Srinath 撰写了两本关于 MapReduce 和许多技术文章的书。他获得了博士学位。来自美国印第安纳大学。 Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师
玄姐谈AGI
2022/03/10
2670
[译]Lua编程技巧
这个原则((YAGNI原则))和你计划在将来添加的程序特性有关,该原则是 “You aren’t gonna need it(你不会需要它的)” 的缩写.你不应该在需求明确之前添加新的程序功能或者程序特性,任何新的程序特性其实都会对程序的扩展性产生限制,所以一个不必要的程序特性很可能会影响到之后新增的一些必要的程序特性,并且当程序特性需求不明确时,我们也很难定义该程序特性实际的开发内容和测试方法.
用户2615200
2022/06/05
6250
系统架构的11条原则
价值为王的另一种说法叫做YAGNI。YAGNI 是 You aren’t gonna need it 的缩写。该原则的基本含义就是,不应该开发任何当前不使用的功能。因为这些占用开发成本的功能,可能根本没有人用。而且不仅仅是开发成本打了水漂,你还要不断投入维护成本,来保证这些无人使用的功能可以正常运行。
静儿
2022/05/06
5510
系统架构的11条原则
《如何做好软件设计》:设计原则
软件设计是一门关注长期变化的学问,日常开发中需求不断变化,那我们该怎么编写出可以支撑长期变化的代码呢?大多数人都认同的解决方案是利用设计模式,这里就有一个问题:怎么融汇贯通的将设计模式应用到实际项目中呢?这就是我们本篇文章的主题:设计原则。
yangwq
2021/02/06
6370
《如何做好软件设计》:设计原则
相关推荐
程序员能力提升:你应该知道的那些编程原则!!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验