zoukankan      html  css  js  c++  java
  • 程序出现这样的问题,到底是谁的责任?

    前一段时间,在项目里遇到这样一个问题。

    我提供了一些函数,比如A(),B(),C().....。之后其他人根据具体情况调用不同的函数。这些函数有一个

    共同点,就是调用方式非常相似。

    使用者可能会这样使用这些函数

    if(condition == 1) A();

    else if(condition == 2) B();

    else if(condition == 3) C();

    else ...


    现在是看不出来有什么问题。但是问题在于调用函数没有这么简单,举一个复杂点的例子。


    使用者可能这样使用

    if(condition == 1)
    {
      do{
        if(condition2) break;
        A();
        if(condition3 && condition4)
        {
          //do some code...
        }
      }while(condition1)
    }
    else
    if(condition == 2)
    {
      do{
        if(condition2) break;
        B();
        if(condition3 && condition4)
        {
          //do some code...
        }
      }while(condition1)
    }
    else ...

    以上只是为了说明,每种情况的处理方法都差不多,但是都很复杂,有那么多得条件和操作。

    现在出现问题了,调用者总会用错这些条件,比如condition2成立应该跳出循环,但是忘记break了。

    或者又有其它的一些错误。总之即使调用A的情况弄对了,有的时候就偏偏忘记改调用B的那段代码。

    导致问题总是接连不断的出现。

    当然,有人说了,你这个明显有重复代码,改成参数化不就行了。


    可以改成这样:

    void func(int condition)
    {
      if(condition == 1) A();
      else
      if(condition == 2) B();
      else
      ...
    }

    之后上面那段洛里啰嗦的代码就可以这样改


    do{
      if(condition2) break;
      func(condition);
      if(condition3 && condition4)
      {
        //do some code...
      }
    }while(condition1)。

    但是关键的这个func函数应该由谁来提供呢?一开始我只是提供了A,B,C...这些函数,我本以为使用者

    可以自己写一个func函数,但是我错了,使用者并没有这么做,而是赤裸裸的按照最笨的那种方法。当我

    发现时,已经晚了,程序中到处都是这样的代码,以至于我苦不堪言。虽然单独提供A,B,C...可以使程序

    更加灵活(万一使用者对函数有了不同的使用情况),但是到现在为止没有出现什么特例的使用情况。

    而我也非常后悔,为什么自己不在当初提供一个参数化的方法。

  • 相关阅读:
    MongoDB分片集群还原
    集群因子(Clustering Factor)
    Sunisoft.IrisSkin.SkinEngine 设置winform皮肤
    17monipdb根据IP获得区域
    ArraySegmentSample
    RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
    Git 基本分支规范
    C# 获取方法内参数名称
    (转)C#中的Predicate<T>与Func<T, bool>
    EF 多线程TransactionScope事务异常"事务EFTransaction类定义:与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。"
  • 原文地址:https://www.cnblogs.com/haolujun/p/2365404.html
Copyright © 2011-2022 走看看