程序出现这样的问题,到底是谁的责任?

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

我提供了一些函数,比如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...可以使程序

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

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

原文地址:https://www.cnblogs.com/haolujun/p/2365404.html