锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

代码整洁之道

时间:2023-08-02 17:07:00 圆形双密封电连接器

一、前言

1986年1月28日,美国东部时间上午11:39,挑战者号航天飞机发射仅73.124秒后,由于右侧固体火箭助推器故障,124秒后.5万米高空爆炸坠毁,7名航天战士全部死亡。

背景:高热气体从故障固体火箭助推器的外壳接头泄漏,喷洒在外部燃料舱上,主液氢燃料舱底部爆炸,液氢点燃。

根本原因:在火箭助推器的圆形接缝处,有2个由合成橡胶制成的同心密封圈。发射前夜,气温降到了-8摄氏度,比密封圈的最低承限温度低了13度,这个温度下的密封圈已经硬的失去了弹性,无法很好地密封高热气体。

工程师写了备忘录,发出了高风险预警信号,要求宇航局管理人员取消发射任务,面对金融和政治 压力宇航局管理人员无动于衷,最终导致灾难。

反思:提前严格检测各部件,并向制造商莫顿报告问题*奥赛科公司和美国宇航局的管理人员发出预警信号,抗议取消发射任务。以下是O型圈:提前对各部件进行严格检测,向制造商莫顿报告问题*奥赛科和美国宇航局的管理员发出预警信号,抗议取消

二、联想(雪崩效应)

由于上述挑战者事故,我们想到了我们作为工程师开发的系统,当小问题产生的一系列连积累也会导致以下问题:

1、不能使用服务提供商;

2、重试加大请求流量;

3、服务调用者不可用;

4.整个系统崩溃不可用

虽然2017年支付系统没有遇到灾难性问题,但各种问题层出不穷。当时的系统技术栈非常落后。

技术栈:Struts1.0、ibatis、jsp/html、ThreadPoolTaskExecutor定时任务。

程序:代码冗余、结构混乱、开发困难、测试部署困难。

遇到的问题action2000多行代码,一个method方法有数百个银行代码、上游渠道、支付方式和路由。支付系统位于中间系统中,下面连接商家的支付渠道接口,上游连接各银行机构等渠道。没有可视化界面系统部署来测试和操作,只有一个jsp测试页面用于测试每个接口(交易订单、退款、交易查询、退款查询等)。

查询问题非常困难。您需要不同公司运维部门同事的机器,登录生产服务器跟踪日志查询问题(或打包日志查询)。经常出现长或短的问题,商家没有收到支付系统的异步通知,一个是由于支付系统问题没有通知商家,另一个是由于上游渠道问题没有通知支付系统,或在接收上游异步通知的过程中失败。

三、重构

公司决定重构系统,基于上述频繁问题造成的运维人员成本和时间成本。

技术栈:SpringBoot/SpringCloud kafka Redis vue angluar

该系统采用微服务架构,根据业务将支付系统分为:交易、支付、清算、收银台等模块,前后分离策略。

开发、测试和部署变得非常简单,使用链接日志跟踪中间,调查问题简单方便,在线问题减少了很多。

如图所示:

四、代码整洁之道

4.1 什么是整洁代码?

  • 代码逻辑直接,缺陷难以隐藏
  • 尽量减少依赖,维护方便,阅读方便
  • 完善代码逻辑的分层策略,不冗余
  • 有单元测试、性能调
  • 只提供一种做一件事的方式
  • 4.2 方法和技巧

  • 有意义的命名
    重构
    Code Review逐步改进
  • 4.3 有意义的命名

  • a、名副其实
    b、避免误导
    c、区分有意义
    变量、函数、参数、类、包命名的原则
  public List getThem(){         List list1 = new ArrayList();  for(int[] x : theList)                  if (x[0] == 4)         list1.add(x);         return list1;     }  

我们认为上述代码不是很整洁,至少有以下问题:

1theList什么类型的东西?

p style="margin-left:0in;text-align:left;"> 2 theList 零下标的含义是什么?

3)值4的意义是什么?

4)怎么使用返回的列表?

运用整洁的技巧之后:

  public List getCat(){
        List catList = new ArrayList();
            for(Cat cat : animals)
	    if (cat.color == Constants.WIHTE)
                    catList.add(cat);
        return catList;
    }

五、重构

1、何谓重构:软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高可理解性,降低成本。

2、为何重构:可读性差、难以维护和修改,冗余甚至出现隐藏bug,带来线上隐患。重构可以改进这些问题,帮忙找出bug,避免问题。

3、何时重构:三次法则第一次做某件事时只管去做 第二次做类似的事会产生反感,但无论如何还是可以去做 第三次再做类似的事,就应该重构了。

预备性重构,让添加新功能更容易;帮助理解重构,使代码更易懂;有计划的重构,长期重构等。

4、挑战:延缓新功能开发,代码所有权,分支问题、测试问题。

尝试重构以下代码段,重构之前:

public void scaleToOneDimension(float desiredDimension, float imageDimension){

        if(Math.abs(desiredDimension - imageDimension) 

重构之后:

   public void scaleToOneDimension(float desiredDimension, float imageDimension){

        if(Math.abs(desiredDimension - imageDimension) 

六、总结

我们在做系统开发编码时,无论是对于系统响应及时性没有前端系统要求那么高,却有业务复杂、数据严谨的性质。还是面对高并发多线程,海量业务,分布式事务,一致性等要求很高的情况。良好的代码质量是保障系统和业务稳定的基础,要求我们从每一个代码、每一个变量、每一个方法做起。

bati收s程序jsp/htmlThreadPoolTaskExecutor任务

代码冗余、结构混乱、开发困难、测试部署艰难

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章