zoukankan      html  css  js  c++  java
  • 代码中的坏味道

      写了半年的代码,对面向对象还是只有个初步的了解,还不能达到熟练运用的地步,但是从半年的编码中,隐隐约约感觉到影响代码结构的坏味道的代码。

    1. 首先就是重复代码,一个程序中重复代码过多,导致维护时一旦修改就需要将所有重复的代码都修改一遍。尤其是一些逻辑复杂的代码或者参数过多的代码,很容易出现某个个地方的修改不对或没有修改到等问题。
    2. 属性放置的位置不对,例如UpdateUI作为UI的控制器,直接将UI中的一个Window的Panel定义为UpdateUI的属性,虽然这样做在UpdateUI中很方便的就能操作Panel,但是UpdateUI作为整个UI的控制,并不一定只针对一个Window,如果UpdateUI控制多个Window,就会导致UpdateUI中属性过重,且大部分都是对当前Window没有用的属性。
    3. 类的职责定位不清晰,如Window用来构建窗口,那么关于业务的逻辑就不应该还放在UI(Window)中,例如开启统计的方法应该属于UpdateUI,Window的作用就是创建各种UI和保存子组件的引用。

      对应的措施如下:

    1. 重复的代码尽量提取到一个方法中,通过调用新加的方法来解决代码重复的问题;两个类中的有许多类似的方法,可以考虑将两个类抽象出一个公共的抽象父类,将重复的方法定义为父类的方法;如果两个类之间不是同一中类型,即不适合使用继承公共的抽象类,可以使用组合的方式解决重复代码的问题,比如A和B中都定义了a方法,且A中有B类的引用,可以调用A.a()的位置都修改为通过b.a()来替换,去掉A中的a方法。
    2. 移动属性,通过组合的方法,将属性移到具体对象的属性中,然后将原来直接使用该属性的地方修改为组合对象的新属性的get方法,如果存在给移动属性赋值的情况就使用组合对象的新属性的set方法。
    3. 将界面跟数据分开(MVC,听到的很多,其实理解不深),首先在Window类中,应该只有UI组件的定义、布局,具体的数据填充应该通过一个控制类来完成例如UpdateUI。Window类中包含了一个UpdateUI的实例,当操作Window中的控件,涉及到数据操作或者界面刷新时统一通过组合对象调用UpdateUI中的方法来实现,这样关于数据的处理(业务逻辑)始终只在UpdateUI中完成,将Window和数据分开了。Window相当于V,UpdateUI对应C。

      仅仅是我在重构项目的一些体会,没有什么条理,讲的也不太清晰,见谅。

    每多学一点知识,就少写一行代码。
  • 相关阅读:
    java的final变量理解
    springMVC如何判断入参是默认参数还是请求传过来的参数?
    java反射新的应用
    冒烟测试和回归测试的区别
    git变基、冲突解决
    mockServer学习
    mongodb查询之模糊查询
    springxml配置构造函数入参
    mockito学习
    solr官方文档翻译系列之schema.xml配置介绍
  • 原文地址:https://www.cnblogs.com/guanmu/p/4237809.html
Copyright © 2011-2022 走看看