zoukankan      html  css  js  c++  java
  • 代码重构之逻辑聚集

    上一篇文章中写了一个重构数据结构,也就是数据聚集的例子。之前还有过一个经历,是重构一个很长的函数,过程大概就是把相关的逻辑聚集起来。我将其称为逻辑聚集。这是一个重构代码逻辑的过程。

    故事是这样的。在我手上的,是一个由几百行代码组成的函数。程序整体上看起来有比较清晰的代码块,有的代码块很相似,但是细节有不同。曾经尝试修改过这个代码。但是,由于一些局部变量贯穿整个函数,在不同的地方发挥作用,而且,不同的代码块之间相互影响。所以,修改这个函数的逻辑很困难,一个小的改动就要改好几个地方。所以,就想着重构一下这段代码。最直接的目标就是,将这个函数变短到几十行的样子,并且使得函数更容易理解。

    首先,将几个看起来相似的代码块提取出来,抽象成一个单独的函数。而对于这几个代码块中不同的部分,则以变量的形式表示,作为函数的参数。需要注意的是,在修改过程中,要将只在代码块中起作用的变量作为局部变量,而将前面代码穿过了的参数作为函数参数传入进来,并且将代码块中修改了,而后续代码还有用的变量作为函数的返回参数。

    其次,将其他的逻辑相对比较独立的代码块提取出来,抽象成单独的函数。同样要注意上面所提的事项。

    最好,很重要的一点,要注意给每个提取出来的函数起一个直观易懂的名字。

    经过这样的修改之后,我惊奇的发现整个函数变得很短,也很容易理解,很直观。整个函数看起来可能类似这样

    1 void process_data(int* data, int len, int flag) {
    2   parse_data(data, len);
    3   if (flag) {
    4     transform_data_with_method_1(data, len);
    5   } else {
    6     transform_data_with_method_2(data, len);
    7   }
    8   compress_data(data, len);
    9 }

    而且前面提到的那些贯穿整个函数的局部变量也被消除掉了。这时候尝试对代码做一些修改就容易多了。


    最后,总结一下逻辑聚集的好处

    • 聚集起来的短小函数更容易重用
    • 聚集起来的短小函数更容易测试
    • 由若干个调用这些短小函数所组成的代码更容易理解,有问题更容易发现,也更容易修改和扩展。
    • 短小的函数使得局部变量的作用域更小,因此程序整体上更容易做并行,所有在有些情况下可以使程序运行效率更高。
  • 相关阅读:
    在SpringBoot或者Spring项目中实现最原始的分页功能
    element ui 弹出组件的遮罩层在弹出层的上面的解决方法
    vue中ref的使用(this.$refs获取为undefined)
    echarts的图表根据父容器大小的改变而改变(弹窗easy-ui的window窗口)
    vue项目使用history模式打包应该注意的地方
    echarts数据变了不重新渲染,以及重新渲染了前后数据会重叠渲染的问题
    element-ui的layout将24等分换为48等分
    vue中解决拖动和点击事件的冲突
    制作首页的显示列表。
    发布功能完成。
  • 原文地址:https://www.cnblogs.com/l00l/p/4143924.html
Copyright © 2011-2022 走看看