源代码: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?"