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

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

作者: 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