一致 VS 正确

news2024/9/21 20:51:53

“代码命名时,一致大于正确”

本文适合以下小伙伴阅读:

  • 经常会有疑惑:这谁的单词拼错了,我之后要将错就错吗?
  • 时常感觉到:项目中的命名好乱啊,明明是一个东西怎么一堆不同的名字

好了,正文开始!

现实中的问题

一线编写代码时,相信大家都遇到过命名或概念不一致的问题,明明是同一个东西,却在不同的地方命名不一致,导致修改起来非常麻烦,且很容易漏掉修改点。

遇到此情况时一般都会影响开发工期,有时自己消化的掉,但有苦说不出;有时消化不掉了,就会使项目延期发布。它也会隐藏的增加项目风险(由于认知成本升高),增加项目成本。

那出现这种命名不一致的情况到底要怎么办呢?

这里提供两个方法:优雅的方法和必须做抉择时的策略

优雅的方法:一致性文档

如果项目还没开始,或者当前项目有足够的灵活性可以支撑一定的开发流程的调整,那建议使用一致性文档方案。

这个方案不是在正确和一致之间选择,是全都要。既要一致,又要正确。所以比较推荐。

但相对的,会多付出一些不算大的成本,用来保证既正确与一致。

看图聊聊:什么是一致性文档

一个内部有两个概念的系统,应该是这样的:
在这里插入图片描述此时系统中只有两个概念,独立清晰

但实际上,由于系统中使用概念的次数很多,所以实际可能是这样:

在这里插入图片描述
图中,系统有两个概念,但相同的概念出现了很多次,就像一个命名可能会用在很多地方一样。

这样也是健康的,因为系统中的概念虽然分散,但概念仍然统一。

后面讲对此的优化,这里先略过

但如果此时对应了多个开发人员,就可能出现偏差:
在这里插入图片描述
此图表示开发者对概念的加工,具体点可以理解为对某事物的命名

图中所示,对同一个概念(虚线框中的元素),两个开发者对其理解和映射不一致,导致概念一致性出现问题。比较直观的表现是命名的不一致。

那在这种情形下,系统的内部命名就像这样:
在这里插入图片描述
途中可以看的出来,系统中虽然还是两个概念,但系统内部的命名已经很混乱了。而且,图中才以两个开发者为例。开发者越多,这种情况越明显。

那如何解决这个问题呢?

其实有些读者已经想到了,只要去掉上边那个导致错误的步骤就好了。

就是:不要让开发者自己加工概念

可以团队讨论,可以负责人决定,也可以架构师定,但不要让每个开发者自己加工概念。

在这里插入图片描述图中表示以团队为单位,对概念进行加工(命名)。

产出物为文档,此文档团队内共享。

使用此文档做约束后,系统内的命名情况就像这样:
在这里插入图片描述

虽然引用没有减少,但概念在系统中出现的形式统一了。

这样一来,系统就整洁多了。而且这文档也确实起到了意义(而不是摆设)。

而且,这个文档不光能规范命名,也作为团队内对齐概念、业务名词等的工具。总之,概念不一致相关的问题都可以用这个一致性文档解决试试。

一致性文档示例(仅以命名为例)

通过前期的需求分析和设计(初步可参考:需求和建模),应该有一定的业务概念出现了。

然后建立相应的映射,分发给团队的开发人员参考。

不用太复杂,表格形式就可以。

这里以需求和建模中贪吃蛇小游戏的概念为例:

  • 名词:蛇、墙、蛇身、蛇头、食物、方向
  • 动词:移动、碰、吃、变长、死
概念英文映射
snake
wall
身体body
head
食物food
方向direction
移动move
bump
eat
变长grow
die

这样开发时就会减少很多的不一致,后边维护会舒服很多。

而且,因为统一了概念并文档化了,无论是内部沟通还是外部沟通,都可以减少歧义,增加沟通效率。

必须做抉择时的策略:一致大于正确

一致大于正确,说白了就是将错就错。

下面来聊聊为什么要“错”的决策更“对”。

下面从一个示例图说起:
在这里插入图片描述
图中黑圆代表错误命名,白圆代表正确命名。

现在,假设一个系统已经有了4个错误命名:

在这里插入图片描述
让我们看看发现错误命名后的不同操作对比:
在这里插入图片描述
左图表示使用正确命名的操作后的系统概况。
右图表示使用相同的错误名称后的系统概况。

看起来挺明显的,如果以系统的复杂程度来考量,明显右侧的系统复杂程度更低。

最起码它是一致的,就更容易理解。

简单来说:错虽然错,但最起码统一了,两样占一样了。

如果改成对的命名,系统中的概念更多了,得不偿失。

而且,其实对于软件开发来说,同样的错误其实很容易改,既可以搜索,又可以借助开发工具的联动修改功能,其实后面也很容易调整的。

在这里插入图片描述
上图为使用正确的命名统一替换掉所有错误命名的示意图。

所以,如果非得从正确和一致上选,那一致更重要。

总结

项目中出现命名不一致的时候,可以使用一致性文档来解决问题。如果一时之间做不到,那就优先保证名称的一致性,后续可以统一调整。

内容还感兴趣吗?公众号中会有更多相关内容持续更新哦
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1702408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业选择定制化MES管理系统时需要考虑的核心功能

在当今制造业的数字化转型浪潮中,企业对于实现生产现场透明管理的需求愈发迫切。为了满足这一需求,MES管理系统成为了众多企业的首选解决方案。MES管理系统以其高度的灵活性和可定制性,能够根据不同行业的特性,为企业提供量身定制…

告别繁琐!Xinstall助你轻松实现APP地推结算,提升推广效率

随着移动互联网的迅猛发展,APP市场竞争日益激烈。面对线上推广转化率下降、成本上升的挑战,越来越多的APP厂商开始尝试线下地推这一更为直接、有效的推广方式。然而,地推结算过程中的种种问题却让许多企业头痛不已。今天,我们将为…

信息化项目必须进行验收测试吗?软件测试公司验收测试流程分享

信息化项目验收是指在软件开发完成之后,对其进行独立检查和确认,以确定它是否达到了预期的质量和功能需求。在进行验收之前,必须进行验收测试,这是非常重要的一步。 为什么要进行验收测试呢?好处可不少哦!…

【uniapp】CSS实现多行文本展开收起的文字环绕效果

1. 效果图 收起状态 展开状态 2. 代码实现 <view class"word-wrap" id"descriptionTxt"><view class"fold-text" v-if"isFold"><text class"fold-btn" click"changFold">全文</text&g…

人工智能应用层岗位—AI项目经理/AI产品经理

AI是一门技术&#xff0c;最终落实成产品才能具备商业价值 应用层&#xff0c;就是面向特定应用场景&#xff0c;形成人工智能软硬件产品或解决方案。主要包括行业AI解决方案和热门产品&#xff0c;如自动驾驶、机器人、智能家居、可穿戴的智能设备等 相应的&#xff0c;就会…

猫狗分类识别模型建立①数据标记

一、labelImg库说明 LabelImg是一款非常流行的图像标注工具&#xff0c;广泛用于机器学习和计算机视觉领域。以下是关于LabelImg的详细介绍&#xff1a; 主要功能和特点 1.图像标注 允许用户在图像中标注物体&#xff0c;选择特定区域&#xff0c;并为这些区域添加标签或类…

C语言基础——数组

{\▁/} ( / 。\ ) / ⊃&#x1f494;\⊃ 为什么我那么努力还是得不到那么多赞 ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言…

Linux基础知识点总结!超详细

Linux 的学习对于一个IT工程师的重要性是不言而喻的&#xff0c;学好它是工程师必备修养之一。 Linux 基础 操作系统 操作系统Operating System简称OS&#xff0c;是软件的一部分&#xff0c;它是硬件基础上的第一层软件&#xff0c;是硬件和其它软件沟通的桥梁。 操作系统…

部署Prometheus + Grafana实现监控数据指标

1.1 Prometheus安装部署 Prometheus监控服务 主机名IP地址系统配置作用Prometheus192.168.110.27/24CentOS 7.94颗CPU 8G内存 100G硬盘Prometheus服务器grafana192.168.110.28/24CentOS 7.94颗CPU 8G内存 100G硬盘grafana服务器 监控机器 主机名IP地址系统配置k8s-master-0…

链接预测.

在某些场景中&#xff0c;用户可能希望预测给定节点之间是否存在边&#xff0c;这样的任务称作链接预测任务。 假设输入结点之间是全链接图&#xff0c;连接预测的目的是给边打上标签。 挑战 最简单的是用图的邻接矩阵来表示结点之间的边&#xff0c;但当节点数量多的时候&am…

【C++】从零开始map与set的封装

送给大家一句话&#xff1a; 今日的事情&#xff0c;尽心、尽意、尽力去做了&#xff0c;无论成绩如何&#xff0c;都应该高高兴兴地上床恬睡。 – 三毛 《亲爱的三毛》 &#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x1f303;&#x…

自适应容积卡尔曼滤波|(自适应CKF)的MATLAB源代码

介绍 容积卡尔曼滤波在理论上拥有比UKF更高的精度和稳定性&#xff0c;本自适应算法通过对观测残差的计算&#xff0c;在观测协方差R不准确或无法获得时&#xff0c;对R进行调节&#xff0c;以起到降低估计误差的作用。 模型 使用的是三维的非线性模型&#xff0c;经过适当修…

Hunyuan-DiT环境搭建推理测试

引子 最近鹅厂竟然开源了一个多模态的大模型&#xff0c;之前分享福报厂的多模态视觉大模型&#xff08;Qwen-VL环境搭建&推理测试-CSDN博客&#xff09;感兴趣的可以移步。鹅厂开源的&#xff0c;我还是头一回部署。好的&#xff0c;那就让我们看看这个多模态视觉大模型有…

今日选题。

诱导读者点开文章的9引真经&#xff08;一&#xff09; 标题重要么&#xff1f;新媒体、博客文通常在手机上阅读。首先所有的内容不同于纸媒&#xff0c;手机只展现标题&#xff0c;而内容都是折叠。其次读者能像看内容一样看4、5条或者7、8条标题&#xff08;区别于不同的主流…

LayUI使用(一)点击树组件的右边空白区域也可响应事件

前提&#xff1a; 如下&#xff0c;希望能够点击右边的空白区域也能够响应&#xff0c;而不仅仅是点击文本才响应 分析流程 一开始问了chatgpt&#xff0c;但它给的方案太麻烦了&#xff0c;而且还有错误&#xff0c;因此自己上手F12进入调试模式&#xff0c;点击查看最终渲…

SpringBoot——整合SLF4j进行日志记录

目录 日志 项目总结 新建一个SpringBoot项目 pom.xml application.properties项目配置文件 logger.xml日志配置文件 TestController控制器 SpringbootSlf4jApplication启动类 启动项目 生成logger.log日志文件 日志 在开发中&#xff0c;我们经常使用 System.out.prin…

会声会影2023永久激活版下载 会声会影2023序列号免费 会声会影下载免费中文破解版

会声会影2023永久激活版是一款最新推出的多功能视频剪辑软件&#xff0c;这款软件不仅完美继承了之前多个版本当中的强大功能。而且我们还可以通过会声会影2023永久激活版来体验到标题动态选项、标题特效等多个全新的功能&#xff0c;让你可以更加快速地进行视频编辑。 会声会影…

爬虫利器Frida RPC入门——夜神模拟器环境篇

Frida是一款轻量级HOOK框架&#xff0c;可用于多平台上&#xff0c;例如android、windows、ios等。 frida分为两部分&#xff0c;服务端运行在目标机上&#xff0c;通过注入进程的方式来实现劫持应用函数&#xff0c;另一部分运行在系统机器上。frida上层接口支持js、python、…

备忘录可以统计字数吗?备忘录里在哪查看字数?

在这个信息爆炸的时代&#xff0c;很多人喜欢使用备忘录app来记录生活中的点点滴滴。备忘录不仅可以帮助我们记事、安排日程&#xff0c;还能提醒我们完成各种任务&#xff0c;是我们日常生活中不可或缺的小助手。 然而&#xff0c;在使用备忘录时&#xff0c;有时我们会遇到需…

(已解决)使用IDEA开发工具提交代码时,如何获取最新的commit信息历史记录

目录 问题现象&#xff1a; 问题分析&#xff1a; 方法一&#xff1a;从commit信息历史记录中选取自己想要的commit信息 总结&#xff1a; 方法二&#xff1a;直接获取commit信息历史记录中最新的commit信息 总结&#xff1a; 解决方法&#xff1a; 方法一&#xff1a;…