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 }
    复制代码

    显而易见的注释

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

    原因:强迫症。

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

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

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

    原因:技术能力。

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

    文档中知识的重复

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

    原因:流程和制度问题。

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

     
  • 相关阅读:
    1093 Count PAT's(25 分)
    1089 Insert or Merge(25 分)
    1088 Rational Arithmetic(20 分)
    1081 Rational Sum(20 分)
    1069 The Black Hole of Numbers(20 分)
    1059 Prime Factors(25 分)
    1050 String Subtraction (20)
    根据生日计算员工年龄
    动态获取当前日期和时间
    对计数结果进行4舍5入
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3017943.html
Copyright © 2011-2022 走看看