C#机房重构- - -DAL层工厂优化
【摘要】
前言:
因为第一版机房重构是一个功能就需要对应一个工厂,所以我个人觉得工厂的代码重复率高也不需要怎么多个工厂。虽然第一版有想法但是没有实现思路,所以就先这样用着。到后面这几版逐渐的有思路了,而且对机房重构也比较清晰了。所以有想法很重要,目前能不能实现(不是很重要)!
优化前的代码:
/// <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)