zoukankan      html  css  js  c++  java
  • 重复的方式以及如何消除重复

    重复的方式以及如何消除重复

    有意识重复(懒惰的重复)

    问题:A处的代码和B处的代码很相似,但是又不完全相同。

    原因:开发人员的懒惰或技能不足,进行的是拷贝式的开发。

    方案:引入模板方法模式或回调机制(函数指针、委托和接口)。

    模板方法模式

    复制代码
     1 public abstract class TemplateClass
     2 {
     3     public void Do()
     4     {
     5         DoCommonStep1();
     6         DoCustomStep2();
     7         DoCommonStep3();
     8     }
     9 
    10     private void DoCommonStep1(){}
    11     protect abstract void DoCustomStep2(){}
    12     private void DoCommonStep3(){}
    13 }
    复制代码

     回调机制

    复制代码
    1 public class TaskClass
    2 {
    3     public void Do(Action callback)
    4     {
    5         DoCommonStep1();
    6         callback();
    7         DoCommonStep3();
    8     }
    9 }
    复制代码

    无意识的重复(重复自己)

    问题:A处的代码和B处的代码虽然不相似,但是完成的任务很相似(知识重复了)。

    原因:技能不足、缺少知识库、缺少深入的思考。

    方案:提升自己的技能;整理自己的知识库;多锻炼自己的抽象思维能,有些问题看似不一样,但是从技术上进行抽象会发现它们有很多一致性,如:树的遍历和展示。

    无意识的重复(重复他人)

    问题:A处的代码和B处的代码虽然不相似,但是完成的任务很相似(知识重复了)。

    原因:缺乏沟通、缺乏机制。

    方案:多沟通,在内部多沟通,在社区多沟通;建立良好的沟通和复用机制,在体制和文化上鼓励复用。

    职责过多的方法

    问题:A方法完成任务T1和T2,B方法完成任务T2和T3,没有将T2提取为独立的方法。

    原因:懒惰。

    方案:提取公共子方法。

    职责过多的继承体系

    问题:A类完成任务M和N,A的子类A1完成任务M1和N1,A的子类A2完成任务M1和N2,M1出现了重复。

    原因:职责过多。

    方案:引入策略模式或桥模式。

    复制代码
    1 public class A
    2 {
    3        public void N(){}
    4     
    5        public void M()
    6       {
    7          this.策略.M();
    8        }
    9 }
    复制代码

    显而易见的注释

    问题:程序中遍布各种无用的注释。

    原因:强迫症。

    方案:引入具备解释性的变量或子方法。

    界面、领域和数据库中知识的重复

    问题:添加一个数据库字段,需要修改领域模型和界面。

    原因:技术能力。

    方案:引入元数据驱动开发,采用代码生成器或元编程。

    文档中知识的重复

    问题:文档中的知识不匹配代码中的知识。

    原因:流程和制度问题。

    方案:目前没有想到好的思路(待续)。

     
  • 相关阅读:
    nok
    Applescript
    如何混编c++
    排序——希尔排序
    排序——插入排序(找坑)
    排序——选择排序
    排序——冒泡排序
    还债——Java中的Set, List, Map
    还债——Java中基本数据类型,String,数组之间转换(数组不能通过toString转换为String)
    还债——Java获取键盘输入的三种方法
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3017943.html
Copyright © 2011-2022 走看看