您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

如何在开发中规避硬编码

时间:2022-02-01 11:11:22  来源:  作者:晓掌柜丶韶华

一、背景

1.1、时间紧任务重

在之前开发一套公司内部系统时一方面时间紧前期工作准备不充分,另一方面也在业务对接及编码工作的规范上做得不是很好导致了这套系统仅停留在能用的状态下。

1.2、拓展不友好

其中最大的问题就是拓展性了。整个开发整体使用的是:

SpringBoot + shiro + MyBatis + easyPoi + Layui + MySQL5.7(后续升级为8.0) + redis + RabbitMQ 的模式。

前后端无分离。这些其实都是还好的,问题就在于代码中存在不少的硬编码,这就导致了对后续业务拓展支持的不友好!

PS: 能把锅推到敏捷开发上吗?不!还不是因为自己菜!!!

1.3、该来的总归是要来的

最近业务有些许变更,于是这些硬编码部分就整体出问题了:不,我们不支持这样子的!

但是业务是不能停下来等人的,加之项目的重构排期比较靠后,所以暂时只能在原有系统上进行调整。

二、关于硬编码

2.1、什么是硬编码

这里提到的硬编码不是计算机的硬编码处理,而是软件编程时代码层面的硬编码(简单来说就是死板不支持变通的代码)。

2.2、常见的硬编码示例

PS: 仅为伪代码示例,意思一下就可以了!

① 条件处理上的硬编码


        if("单据检查完成".equals(orderState)){
            System.out.println("XXX单据检查完成了!");
        }

JAVA

② 信息处理上的硬编码


        if(true){
            System.out.println("小明已经完成了任务A!");
        }

Java

③ 返回值上的硬编码

        
        if("小明".equals(name){
            return "主管职位";
        }

Java

④ 属性值上的硬编码


        String orderAddUrl = "http://baigedu.com:8080/order/add";

Java

 

2.3、硬编码所带来的一系列困扰

PS: 简单以上述四种情况为例。

① 容易产生条件不匹配的情况导致无法进入条件

比如:项目换人维护了或与前端对接时,他在调用的时候写的是“单机检察完成”

② 这个任务只能是小明完成的?小明在这里只能完成任务A?小华我要完成任务B!

③ 小明:我这辈子就只能是个小主管?瞧谁不起呢!

④ 百个度:我们项目调整了,现在这个接口改成了:
Http://baigedu.com:8089/orderAdd

2.4、综上所述

硬编码的不好之处竟恐怖如斯!

PS: 同时我们也不能单一的认为硬编码是不好的。在写单元测试时不来个硬编码,在一些定值上(男、女、未知),快速开发时硬编码还是有作用的,只是说正式开发中可能会存在一些坏味道...

三、应对性处理

3.1、遍寻硬编码遗留

因为系统的每一个模块都有经手,所以问题存在之处的整理工作倒是并不复杂。

3.2、硬编码模块重构

因为一些客观问题本次也只能消除90%的硬编码部分,整个项目的完善就暂时寄托于后续的项目重构了。同时这90%的硬编码改造已经能满足当下需求及后续比较友好的拓展性,本着不追求极端完美主义的想法加之整个改进的些许心得遂有此文。

三、规避硬编码的一些常用方法

3.1、拒绝定值,使用参数传递

以上情景二如果把 name 和 task 都作为入参来处理,那很轻易的实现诸如:小花完成了任务C这项功能。

3.2、枚举类

枚举类是对拓展友好的,同时也能规范数据。上述场景一中把状态写成枚举类就能很轻松的解决状态错误及状态拓展问题!

PS: 千万不要把枚举类直接给到前端,因为不讲码德!

3.3、配置文件

以SpingBoot为例,我们可以把一些使用比较多且不易该的属性配置的Xml或者Yml中,然后再代码中使用@Value注解来使用!

这样场景四种的不管怎么变我们都可以直接在配置文件中修改,而且只修改一处!

PS: @Value注解不能使用static修饰

3.4、数据库配置

在上述场景三种,我们可以把小明的信息配置到数据库中,然后再使用时读取数据库信息。这样小明以后升职加薪出任CEO迎娶白富美都没有问题。

(小明的肯定!)

四、后记

其实整体来说这些都是不好的编码习惯或仅考虑到当下而没有对后续的拓展做容错而导致的。

希望我们都能写出一手漂亮的代码,做一个讲码德的好开发!

PS: 代码整洁之道的熟读都应该提上日程了哈!!!



Tags:硬编码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、背景1.1、时间紧任务重在之前开发一套公司内部系统时一方面时间紧前期工作准备不充分,另一方面也在业务对接及编码工作的规范上做得不是很好导致了这套系统仅停留在能用...【详细内容】
2022-02-01  Tags: 硬编码  点击:(12)  评论:(0)  加入收藏
前言 传统定时器是硬编码。但是有的时候业务上需要不断地调整问题描述 我们开发了一个定闹钟的功能。这个功能肯定是定时器开发。但是这就存在一个问题这个定时是动态的。那...【详细内容】
2021-06-17  Tags: 硬编码  点击:(142)  评论:(0)  加入收藏
▌简易百科推荐
图像阈值分割图像阈值分割,一种广泛应用的分割技术,利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取...【详细内容】
2022-02-07  IT小奋斗    Tags:阈值   点击:(5)  评论:(0)  加入收藏
写代码离不开调试,调试离不开断点。IDEA 对于断点的支持非常丰富。掌握这些技巧以后,可以大大的提升开发效率。是帮助程序员保住头发,远离 996 的秘密武器。 断点类型IDEA 支...【详细内容】
2022-02-04  刘水镜    Tags: IDEA   点击:(8)  评论:(0)  加入收藏
结论:当所需的精度由小数点右侧的位数决定时,decimal 类型是合适的。 此类数字通常用于财务应用程序、货币金额(例如 $1.00)、利率(例如 2.625%)等。 精确到只有一个小数用 decim...【详细内容】
2022-02-03  到底想咋样啊    Tags:Decimal   点击:(7)  评论:(0)  加入收藏
一、背景1.1、时间紧任务重在之前开发一套公司内部系统时一方面时间紧前期工作准备不充分,另一方面也在业务对接及编码工作的规范上做得不是很好导致了这套系统仅停留在能用...【详细内容】
2022-02-01  晓掌柜丶韶华    Tags:硬编码   点击:(12)  评论:(0)  加入收藏
最容易引发内存溢出的,就是系统创建出来的对象!1 对象在Eden区分配系统运行时,一直不停创建对象,然后大量对象会填满Eden。Eden满,就会触发一次YGC,然后存活对象进入S区: 2 高并发...【详细内容】
2022-01-31  JavaEdge    Tags:对象   点击:(13)  评论:(0)  加入收藏
本文是“2021 InfoQ 年度技术盘点与展望”系列文章之一,由直播内容整理而成,重点聚焦编程语言领域在 2022 年的核心趋势展望,希望能帮助你准确把握 2022 年编程语言领域的核心...【详细内容】
2022-01-29  InfoQ    Tags:编程语言   点击:(18)  评论:(0)  加入收藏
大多数IT运营专业人员面临的另一个挑战是需要以更快、更高效、更高的工作量执行任务和工作流程。值得庆幸的是,像无代码自动化这样的工具可以提供一个缺失的环节来优化效率,...【详细内容】
2022-01-29  智能协同表格    Tags:无代码   点击:(13)  评论:(0)  加入收藏
while(1) 和 for(;;)它们不都是无限循环吗,作用应该一样啊,它们到底有什么区别?要回答这个问题,其实你各自编写一段while(1) 和 for(;;)的代码,编译对比一下代码大小和汇编文件,你...【详细内容】
2022-01-25  IT三宝    Tags:汇编   点击:(14)  评论:(0)  加入收藏
一、摘要在实际的业务开发过程中,我们常常会碰到需要与第三方互联网公司进行技术对接,例如支付宝支付对接、微信支付对接、高德地图查询对接等等服务,如果你是一个创业型互联网...【详细内容】
2022-01-24  DNF搬砖摸金达人    Tags:API接口   点击:(16)  评论:(0)  加入收藏
Swiss Army knife 可以说是本周的关键词了,多个项目采用该词来描述它的特性:像是能全方位解决浏览器“网络”操作的 CyberChef 方便你进行数据加密、解编码,还有帮你处理 JSON...【详细内容】
2022-01-24  HelloGitHub    Tags:GitHub   点击:(22)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条