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