打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
简单抽象工厂-继简单工厂改善

昨天简单阐述了简单工厂的编程模式,他实现了简单三层中业务逻辑层与数据层的解耦和业务逻辑层与表现层的解耦,使数据访问层的变化不会影响到业务逻辑层,业务逻辑层的变化不回影响到表现层,使程序更加的灵活。但简单工厂类中创建的对象是写死的,也具有局限性,所以引入抽象工厂,只需要通过修改配置文件的信息和反射,从而在业务逻辑层中创建不同的DAL对象,实现低耦合,高内聚的编程思想。

以下是相关代码实现:

在配置文件<configuration></configuration>节点中添加

1   <appSettings>2     <!--程序集-->3     <add key="DalAssemblyPath" value="Test.SqlServerDAL"/>4     <!--命名空间-->5     <add key="NameSpace" value="Test.SqlServerDAL"/>6   </appSettings>

之后,新建一个抽象工厂类,将配置文件中的程序集和命名空间获取到,利用反射Assembly.Load()方法加载程序集,再使用CreateIntance()方法创建实例。

 1 using System; 2 using System.Collections.Generic; 3 using System.Configuration; 4 using System.Linq; 5 using System.Text; 6 using IDAL; 7 using System.Reflection; 8 namespace StudentFactoryDAL 9 {10     //抽象工厂类11     public class AbstractFactory12     {13         private readonly static string dalAssemblyPath = ConfigurationManager.AppSettings["DalAssemblyPath"];//根据配置文件读取程序集14         private readonly static string nameSpace = ConfigurationManager.AppSettings["NameSpace"];//根据配置文件读取命名空间15         /// <summary>16         /// 用反射创建实例对象17         /// </summary>18         /// <returns></returns>19         public static IStudentDAL CreateStudentDal()20         {21             string fullclass = nameSpace + ".StudentDAL";22             return CreateIntance(fullclass, nameSpace) as IStudentDAL;23         }24         /// <summary>25         /// 根据类创建实例26         /// </summary>27         /// <param name="classname">命名空间+类名</param>28         /// <param name="assemblypath">程序集</param>29         /// <returns></returns>30         public static object CreateIntance(string classname, string assemblypath)31         {32             var assembly = Assembly.Load(assemblypath);//加载程序集33             object Intance = assembly.CreateInstance(classname);//根据命名空间+类名创建类的实例34             return Intance;35         }36 37     }38 }

最后,在相关数据访问层使用抽象工厂类创建DAL对象即可。

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Test.Model; 6  7 namespace Test.BLL 8 { 9     public class StudentBLL:IBLL.IStudentBLL10     {11 12         //IDAL.IStudentDAL dal = StudentFactoryDAL.FactoryDAL.CreateStudentDAL();13         //利用抽象工厂创建DAL对象,进行操作        14         IDAL.IStudentDAL dal = StudentFactoryDAL.AbstractFactory.CreateStudentDal();15         public List<Student> GetAllStudent()16         {17             return dal.GetAllStudent();18         }19     }20 }

这样,修改数据库中的数据访问层(比如:换个数据库访问层),只需要将修改的数据访问层的程序集和命名空间在配置文件中修改即可。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c# – Mapper已初始化
C# Winform 修改app.config文件
【转】C#配置App.config
Ioc依赖注入:Unity4.0.1 在项目中的应用 (MVC和API)
C#常用类 改配置文件
C#动态调用Web服务的3种方法 - 51CTO.COM
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服