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类型)

 

posted @ 2020-02-03 18:46  康世行  阅读(28)  评论(0编辑  收藏  举报