首页 > 其他分享 >重构之卫语句

重构之卫语句

时间:2022-11-19 15:15:09浏览次数:59  
标签:语句 重构 Code householdCity 之卫 residentCity list item null

如果代码嵌套层次过多,阅读内层逻辑时需要仔细查看外层代码信息,增加了理解代码逻辑难度。通过使用卫语句,可以有效减少代码嵌套层次,逻辑会变得更清晰。

先看一段嵌套层次比较多的代码:

然后看一下使用卫语句优化后的效果:

        /// <summary>
        /// 获取当前用户的两个绑定城市(城市列表)
        /// </summary>
        /// <returns></returns>
        public IList<CityForGoodsVM> GetUserTwoCity()
        {
            try
            {
                //局部变量的定义与初始化
                CityForGoodsVM householdCity = new CityForGoodsVM();
                CityForGoodsVM residentCity = new CityForGoodsVM();
                IList<CityForGoodsVM> list = new List<CityForGoodsVM>();
                //判断当前用户是否登录
                if (IsLogined())
                {
                    //获取当前用户
                    CurrentUser user = GetCurrentUser();
                    if (user == null)
                    {
                        list = null;
                    }
                    else
                    {
                        //获取户籍城市
                        householdCity = GetUserHouseholdCity(user.CustomerID);
                        //获取居住城市
                        residentCity = GetUserResidentCity(user.CustomerID);

                        if (householdCity == null && residentCity == null)
                        {
                            //若电商中并没有该用户数据
                            list = null;
                        }
                        else
                        {
                            //判断户籍城市和居住城市是否相同
                            if (householdCity.Code == residentCity.Code)
                            {
                                //相同,只添加其一
                                if (!string.IsNullOrEmpty(householdCity.Code))
                                {
                                    list.Add(householdCity);
                                }
                                else
                                {
                                    list = null;
                                }
                            }
                            else
                            {
                                //不同,添加不为空的
                                if (!string.IsNullOrEmpty(householdCity.Code))
                                {
                                    list.Add(householdCity);
                                }
                                if (!string.IsNullOrEmpty(residentCity.Code))
                                {
                                    list.Add(residentCity);
                                }
                            }
                        }
                    }
                }
                else
                {
                    //若用户未登录
                    list = null;
                }
                //遍历城市
                if (list != null)
                {
                    foreach (var item in list)
                    {
                        //若当前城市未开通售卖没有提车热线
                        if (string.IsNullOrEmpty(item.Hotline))
                        {
                            item.Hotline = "666";
                        }
                        //1为已经开通售卖2为未开通售卖
                        if (item.Initial != "1")
                        {
                            item.Initial = "2";
                        }
                    }
                }

                return list;

            }
            catch (Exception ex)
            {

                throw new Exception(ExceptionCode.GetUserTwoCityErrorCode, "获取当前用户的两个绑定城市异常", ex, TeldExceptionLevel.Error);
            }
        }
View Code

 

再看一下使用卫语句优化后的效果:

        /// <summary>
        /// 获取当前用户的两个绑定城市(城市列表)
        /// </summary>
        /// <returns></returns>
        public IList<CityForGoodsVM> GetUserTwoCity2()
        {
            try
            {
                //局部变量的定义与初始化
                CityForGoodsVM householdCity = new CityForGoodsVM();
                CityForGoodsVM residentCity = new CityForGoodsVM();

                if (IsLogined())
                {
                    return null;
                }

                //获取当前用户
                CurrentUser user = GetCurrentUser();
                if (user == null)
                {
                    return null;
                }

                //获取户籍城市
                householdCity = GetUserHouseholdCity(user.CustomerID);
                //获取居住城市
                residentCity = GetUserResidentCity(user.CustomerID);

                if (householdCity == null && residentCity == null)
                {
                    //若电商中并没有该用户数据
                    return null;
                }
                IList<CityForGoodsVM> list = new List<CityForGoodsVM>();
                //判断户籍城市和居住城市是否相同
                if (householdCity.Code == residentCity.Code)
                {
                    if (string.IsNullOrEmpty(householdCity.Code))
                    {
                        return null;
                    }
                    //相同,只添加其一
                    list.Add(householdCity);
                }
                else
                {
                    //不同,添加不为空的
                    if (!string.IsNullOrEmpty(householdCity.Code))
                    {
                        list.Add(householdCity);
                    }
                    if (!string.IsNullOrEmpty(residentCity.Code))
                    {
                        list.Add(residentCity);
                    }
                }

                //遍历城市
                foreach (var item in list)
                {
                    //若当前城市未开通售卖没有提车热线
                    if (string.IsNullOrEmpty(item.Hotline))
                    {
                        item.Hotline = "4001-300-001";
                    }
                    //1为已经开通售卖2为未开通售卖
                    if (item.Initial != "1")
                    {
                        item.Initial = "2";
                    }
                }

                return list;

            }
            catch (Exception ex)
            {

                throw new Exception(ExceptionCode.GetUserTwoCityErrorCode, "获取当前用户的两个绑定城市异常", ex, TeldExceptionLevel.Error);
            }
        }
View Code

 

优化后的嵌套层次较少,逻辑也更为清晰一些

标签:语句,重构,Code,householdCity,之卫,residentCity,list,item,null
From: https://www.cnblogs.com/lianjinzhe/p/16906130.html

相关文章

  • 表空间基本语句
    默认永久表空间不能删除表空间和数据文件,必须换了后删除    ......
  • mybatis 之 sql语句写法集锦
    1、mapper接口中的方法存在批量数据操作,接口参数是List类型   在mybatis的xml文件中,使用foreach动态标签拼接SQL语句,每一条数据的更新语句对应一条update语句,......
  • JavaScript语法_流程控制语句和JavaScript语法_流程控制语句
    JavaScript语法_流程控制语句://1.语句以;结尾,如果一行只有一条语句则;可以省略(不建议)//1.语句以;结尾,如果一行只有一条语句则可以省略(不建议)leta=3......
  • vba错误处理语句
    vba错误处理语句: a、OnErrorResumeNext//OnError表示过程出现错误怎么办?ResumeNext//表示跳过错误执行语句,执行错误语句的后面语句 //总体......
  • SQL基础篇(一)---JOIN语句执行流程&ON与WHERE的区别
    本文主要记录了MySQL中的JOIN语句具体执行流程,同时分析了ON与WHERE条件的区别。1.执行流程一个完整的SQL语句中会被拆分成多个子句,子句的执行过程中会产生......
  • 常用SQL语句整理
    常用SQL语句整理,示例如下:给表增加字段altertablexx_template_fieldadd`relative_field_key`varchar(255)NULLDEFAULTNULLCOMMENT'关联字段的key',add`relati......
  • 62:else语句
    ###else语句while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:while条件表达式:......
  • 60:break语句
    ###break语句break语句可用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环。【操作】使用break语句结束循环 whileTru......
  • 61:continue语句
    ###continue语句continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环。【操作】要求输入员工的薪资,若薪资小于0则重新输入。......
  • JavaScript_语法_特殊语法与JavaScript_语法_流程控制语句
    JavaScript_语法_特殊语法JS特殊语法:1.语句以;结尾,如果一行只有一语句则;可以省略(不建议)2.变量的定义使用var关键字,也可以不使用......