C#机房重构- - -DAL层工厂优化
前言:
因为第一版机房重构是一个功能就需要对应一个工厂,所以我个人觉得工厂的代码重复率高也不需要怎么多个工厂。虽然第一版有想法但是没有实现思路,所以就先这样用着。到后面这几版逐渐的有思路了,而且对机房重构也比较清晰了。所以有想法很重要,目前能不能实现(不是很重要)!
优化前的代码:
 /// <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类型)
    欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号