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


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

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

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

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

  • 相关阅读:
    推荐个我在用的免费翻译软件,支持多家翻译API整合
    IDEA小技巧:Markdown里的命令行可以直接运行了
    Java 18 新特性:简单Web服务器 jwebserver
    Spring Authorization Server授权服务器入门
    Spring Security实现基于RBAC的权限表达式动态访问控制
    Intellij IDEA 2022 正式发布,这些功能真不错
    【大话云原生】负载均衡篇小饭馆客流量变大了
    【大话云原生】微服务篇五星级酒店的服务方式
    数据建模软件Chiner,颜值与实用性并存
    【大话云原生】煮饺子与docker、kubernetes之间的关系
  • 原文地址:https://www.cnblogs.com/haolujun/p/2365404.html
Copyright © 2020-2023  润新知