C#机房重构- - -DAL层工厂优化

举报
ksh1998 发表于 2021/12/26 01:23:34 2021/12/26
【摘要】 前言:     因为第一版机房重构是一个功能就需要对应一个工厂,所以我个人觉得工厂的代码重复率高也不需要怎么多个工厂。虽然第一版有想法但是没有实现思路,所以就先这样用着。到后面这几版逐渐的有思路了,而且对机房重构也比较清晰了。所以有想法很重要,目前能不能实现(不是很重要)! 优化前的代码: /// <s...

前言:

    因为第一版机房重构是一个功能就需要对应一个工厂,所以我个人觉得工厂的代码重复率高也不需要怎么多个工厂。虽然第一版有想法但是没有实现思路,所以就先这样用着。到后面这几版逐渐的有思路了,而且对机房重构也比较清晰了。所以有想法很重要,目前能不能实现(不是很重要)!

优化前的代码:


  
   
    
     
    
    
      /// <summary>
     
    
   
    
     
    
    
         /// 登录工厂
     
    
   
    
     
    
    
         /// </summary>
     
    
   
    
     
    
    
         public class LoginFactory
     
    
   
    
     
    
    
     
          {
     
    
   
    
     
    
    
             //获取配置文件
     
    
   
    
     
    
    
             string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
     
    
   
    
     
    
    
             //应用反射获得DAL层操作,来返回D层的登录查询类。
     
    
   
    
     
    
    
             public LoginIDAL CreateUser()
     
    
   
    
     
    
    
     
              {
     
    
   
    
     
    
    
                 string ClassName = StrDB + "." + "LoginDal";
     
    
   
    
     
    
    
                 return (LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);
     
    
   
    
     
    
    
     
              }
     
    
   
    
     
    
    
     
          }
     
    
  
 

大家可以脑补下,每一个功能都需要一个对应的工厂。机房收费系统有多少功能,得用多少工厂? 这个问题大家一思考是不是觉得特别可怕。 而且代码重复率高达百分之九十,甚至还多。

上面这张图片里除了我画红圈的地方以外,剩下的代码都是重复代码。大家可以和下面这个优化完之后的代码做一个对比,效果很明显。

优化后的代码:


  
   
    
     
    
    
      //获取配置文件,要实例化的程序集名称。
     
    
   
    
     
    
    
             string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
     
    
   
    
     
    
    
             /// <summary>
     
    
   
    
     
    
    
             ///应用反射获得DAL层操作,来返回D层的登录查询类。
     
    
   
    
     
    
    
             ///缺点:数据类型是死的,不同数据类型的工厂调用需要在调用处强制转换。
     
    
   
    
     
    
    
             /// </summary>
     
    
   
    
     
    
    
             /// <param name="CreatClassName">要实例化的类</param>
     
    
   
    
     
    
    
             /// <returns>d层具体查询</returns>
     
    
   
    
     
    
    
             public object CreateUser(string CreatClassName)
     
    
   
    
     
    
    
     
              {
     
    
   
    
     
    
    
                 //具体要实例化的类
     
    
   
    
     
    
    
                 string ClassName = StrDB + "." +CreatClassName;
     
    
   
    
     
    
    
                 //利用反射返回要实例化的具体类
     
    
   
    
     
    
    
                 return (object)Assembly.Load(StrDB).CreateInstance(ClassName);
     
    
   
    
     
    
    
     
              }
     
    
  
 

优化之后的代码里,把上面写死的那个具体要创建的对象改成了参数。这样就可以根据传不同的参数,来实例化不同的对象。也减少了很多重复性的代码。

BLL层调用:


  
   
    
     
    
    
      //利用反射,实例化D层登录查询类
     
    
   
    
     
    
    
     
                      LoginIDAL idal = (LoginIDAL)fact.CreateUser("LoginDal");
     
    
  
 

调用代码就是在原来的基础上机加个参数,和进行下类型转换。(注释:因为默认工厂类型是object类型)

 

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/104159513

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。