美文网首页
程序业务逻辑的一般处理方法

程序业务逻辑的一般处理方法

作者: qianlihu | 来源:发表于2017-11-17 09:48 被阅读72次

    在代码调试过程中,往往需要花费大量的精力处理业务逻辑。我们先来看一个业务需求

    1. 实现一个远程调用接口,修改指定网络接口的IP地址,子网掩码,默认网关。
    2. 需要同步修改/etc/network/interface文件。
    3. 接口传入参数为json结构。
      部分同学会这样实现:
    int set_net_work(cJSON *param)
    {
      if(param != NULL){
         const char *eth = cJSON_GetObjectItem(param,"eth");
         if(eth != NULL){
           const char *ipaddr = cJSON_GetObjecItem(param,"ipaddr");
            if(ipaddr != NULL){
                    if(eth == eth1){   //strcmp!!!!
                      read_file_get_params(eth1) //读取配置文件获取原始ip地址等信息
                      change_ipaddr(eth1);   //修改ip地址
                      restore_gwaddr(eth1); //重新保存网关地址
                    ....
                  }else if(eth = eth2){   //strcmp!!!!
                        ....
                  }
            }
             if(gwaddr != NULL){
                  ...
              }  
              .....
          }else{
              return -1;
          }
      }else{
        return -1;
      }
    }
    

    上面的代码实现的并不好,逻辑嵌套太深,可读性较低。
    其实业务逻辑大致可分为三个处理步骤,参数校验,参数准备,根据参数处理业务。我们根据这三个步骤来处理一下上面的代码

    参数校验

    参数校验,即检测参数的合法性。代码如下:

    int set_net_work(cJSON *param)
    {
      if(param == NULL)
          return -1;
      const char *eth = cJSON_GetObjectItem(param,"eth");
     if(eth == NULL)
        return -1;
    
    ....
    }
    

    参数准备

    即准备参数,包括从传入参数获得,或由于业务逻辑,执行一些其他准备工作。

    int set_net_work(cJSON *param)
    {
         //参数校验
      if(param == NULL)
        return -1;
      const char *eth = cJSON_GetObjectItem(param,"eth");
      if(eth == NULL)
        return -1;
      //参数准备
      cJSON *ipaddr == cJSON_GetObjectItem(param,"ipaddr");
      cJSON *netmask == cJSON_GetObjectItem(param,"netmask");
      cJSON *defgw == cJSON_GetObjectItem(param,"defgw");
      
      net_param = read_file_get_params(eth);  //获取指定网卡的参数 
      if(ipaddr == NULL)        //如果没有传入ipaddr,则获取原始信息
          ipaddr = net_param.ipaddr;
      if(netmask == NULL)
          netmask = net_param.netmask;
      if(defgw == NULL)
           defgw = net_param.defgw;
    }
    

    业务逻辑处理

    即执行业务逻辑动作,可单独实现一个函数

    int do_set_net_work(const char *eth,const char *ipaddr,const char *netmask,const char *defgw)
    {
        ....   //业务逻辑处理。
    }
    //完整代码
    
    int set_net_work(cJSON *param)
    {
         //参数校验
      if(param == NULL)
        return -1;
      const char *eth = cJSON_GetObjectItem(param,"eth");
      if(eth == NULL)
        return -1;
      //参数准备
      cJSON *ipaddr == cJSON_GetObjectItem(param,"ipaddr");
      cJSON *netmask == cJSON_GetObjectItem(param,"netmask");
      cJSON *defgw == cJSON_GetObjectItem(param,"defgw");
      
      net_param = read_file_get_params(eth);  //获取指定网卡的参数 
      if(ipaddr == NULL)        //如果没有传入ipaddr,则获取原始信息
          ipaddr = net_param.ipaddr;
      if(netmask == NULL)
          netmask = net_param.netmask;
      if(defgw == NULL)
           defgw = net_param.defgw;
    
       do_set_net_work(...);
    }
    

    总结:

    业务逻辑代码总是项目中逻辑最复杂的部分,实现的时候尽量少用if嵌套,可读性会提高很多。

    相关文章

      网友评论

          本文标题:程序业务逻辑的一般处理方法

          本文链接:https://www.haomeiwen.com/subject/mhzzmxtx.html