源代码:13033480群共享
面向接口的业务管理层,已经很好地解决了数据库的切换问题,不过,这需要修改业务逻辑层中的两个类Category.cs和Item.cs中的语句
private staticreadonly ICategory dal =new WestGarden.DAL.Category();
和
private staticreadonly IItem dal =new WestGarden.DAL.Item();
然后重新编译、运行,相当于冷启动。能不能不再重新编译、运行,直接进行切换,实现所谓的“热插拔”呢?
下面的工厂模式解决了这一问题,你只需要改变一下Web.config配置文件,就可实现这一目标。
【操作步骤】
一、新建类库DALFactory,设置属性,添加引用→.NET→System.Configuration;添加引用→项目→IDAL
二、添加类DataAccess.cs,代码如下:
using System.Reflection; using System.Configuration; namespace WestGarden.DALFactory { public sealed class DataAccess { private static readonly string path = ConfigurationManager.AppSettings["WebDAL"]; private DataAccess() { } public static WestGarden.IDAL.ICategory CreateCategory() { string className = path + ".Category"; return (WestGarden.IDAL.ICategory)Assembly.Load(path).CreateInstance(className); } public static WestGarden.IDAL.IItem CreateItem() { string className = path + ".Item"; return (WestGarden.IDAL.IItem)Assembly.Load(path).CreateInstance(className); } } }
三、在Web.config文件中添加如下键值
<addkey="WebDAL"value="WestGarden.DAL"/>
四、业务逻辑层BLL中,添加引用→项目→DALFactory
分别修改Catagory.cs和Item.cs中的语句:
private staticreadonly ICategory dal = WestGarden.DALFactory.DataAccess.CreateCategory();
和
private staticreadonly IItem dal = WestGarden.DALFactory.DataAccess.CreateItem();
五、编译、运行吧……
会不会有童鞋问:
问:这就是工厂模式?
答:是的。
问:这就是大名鼎鼎的工厂模式??
答:是的。
问:就这么简单???
答:是的。
问:Why ????
有童鞋想回答“How?”的吗??
附冷笑话一则:
有两个渔夫在海边打鱼,一天一个渔夫打上来一条美人鱼,鱼尾巴以上是个超级美女,但是渔夫想了想把她放了,另一个渔夫不解,问:"Why?"第一个渔夫耸耸肩,答道:"How?"