标签:style blog http color 使用 os io 文件
1,从(一)说起,面对程序中很有地方都用到Dal层的实例,我们想到了,将创建实例写到一个单独的方法中,由这个方法来维护实例的变化,这样,当需要更改实例的时候,我们只需要更改一下这个方法即可,而不必在程序中到处修改!因此便有了简单工厂。
1 namespace PCITC.OA.DalFactory 2 { 3 public class DalFactory 4 { 5 public static IDal.IUserInforDal GetUserInforDal() 6 { 7 return new PCITC.OA.Dal.UserInforDal(); 8 } 9 } 10 } 11 public class UserInforService 12 { 13 14 //使用EfDal 15 //private UserInforDal userInforDal = new UserInforDal(); 16 //使用AdoNetDal 17 //private PCITC.OA.AdoNetDal.UserInforDal userInforDal = new PCITC.OA.AdoNetDal.UserInforDal(); 18 private IDal.IUserInforDal userInforDal = PCITC.OA.DalFactory.DalFactory.GetUserInforDal(); 19 public UserInfor Add(UserInfor userInfor) 20 { 21 return userInforDal.Add(userInfor); 22 } 23 }
如此Bll层仅仅依赖简单工厂这个程序集,需要修改实例的时候,只需要更改简单工厂一处即可!而且即使网站发布也可以,编译一下程序集替换,然后重启IIS,便可以搞定!
2,这样框架又完美了一部分,但即使这样,如果我们需要更改实例的话,还是需要更改代码,然后编译替换程序集。我们希望做到一种更完美的境界,面对需求的变化,不需要更改代码,只需要更改一下配置就搞定!因此,抽象工厂诞生了!
通过反射和配置文件,我们可以实现抽象工厂,真正做到面对需求的变化,一行代码都不改!
1 public class DalSimpleFactory 2 { 3 public static IDal.IUserInforDal GetUserInforDal() 4 { 5 //return new PCITC.OA.Dal.UserInforDal(); 6 return GetInstance("PCITC.OA.Dal", "PCITC.OA.Dal." + "UserInforDal") as IDal.IUserInforDal; 7 8 } 9 10 public static object GetInstance(string assemblyName,string typeName) 11 { 12 return Assembly.Load(assemblyName).CreateInstance(typeName); 13 } 14 }
<add key="Assembly" value="PCITC.OA.Dal"/> <add key="NameSpace" value="PCITC.OA.Dal"/> <!--<add key="Assembly" value="PCITC.OA.AdoNetDal"/> <add key="NameSpace" value="PCITC.OA.AdoNetDal"/>-->
1 public class DalSimpleFactory 2 { 3 private static string assemblyName = ConfigurationManager.AppSettings["Assembly"].ToString(); 4 private static string spaceName = ConfigurationManager.AppSettings["NameSpace"].ToString(); 5 public static IDal.IUserInforDal GetUserInforDal() 6 { 7 //return new PCITC.OA.Dal.UserInforDal(); 8 return GetInstance(assemblyName, string.Format("{0}.{1}",spaceName,"UserInforDal")) as IDal.IUserInforDal; 9 10 } 11 12 public static object GetInstance(string assemblyName,string typeName) 13 { 14 return Assembly.Load(assemblyName).CreateInstance(typeName); 15 } 16 }
一步一步搭建开发框架(二)工厂模式,布布扣,bubuko.com
标签:style blog http color 使用 os io 文件
原文地址:http://www.cnblogs.com/wanren/p/3891080.html