日期:2014-05-18  浏览次数:20475 次

请教个引用的问题
在简单工厂模式中,为什么DALFactory中不用引用数据层(SQLServerDAL),而在BLL或是在UI层却要引用数据层SQLServerDAL呢?在工厂中反射创建类为什么不是在工厂项目文件中找.dll?

------解决方案--------------------
面向接口编程
DALFactory返回程序集的指定类的实例
private static readonly IItem dal = PetShop.DALFactory.DataAccess.CreateItem();
------解决方案--------------------
1, 数据访问工厂【DALFactory】:用来反射数据层接口,生成接口的实例(instance)。所以他引用IDAL。

2, 业务逻辑层【BLL】:负责业务数据的逻辑执行。首先BLL调用工厂类,创建接口实例(instance),于是BLL引用DALFactory。生成的接口实例存在BLL中,故BLL必须引用IDAL。BLL层必须把Model层的实例(instance)丢给IDAL运算,并把结果返回给高层(UI),所以BLL引用Model。

3, 基于上面的2个项目,4条关系,我们很清晰的得到下面的项目关系图形:


总结:DALFactory引用IDAL,BLL引用DALFactory,BLL引用IDAL,BLL引用Model。
4, 归纳以上分析得到一个完整的6层结构图:



这次应该把关系搞清楚了吧



 




------解决方案--------------------
WEB站点下的Bin文件夹里必须要有MessagingFactory的DLL文件。这个引用是必须的,因为在

web.config里反射的数据集也是要从web站点的bin文件夹里获取的
DALFactory程序集里通过反射创建针对特定数据访问层里的对应类实例,这样BLL调用接口时就知道调

用这个对应类实例里的实现方法。
而反射动态加载程序集是通过这种方法 Assembly.Load("程序集").CreateInstance("命名空间.类"),其中的“程序集”

读取的是Web层bin文件夹下对应的 dll,即反射加载的程序集dll在Web层的bin文件夹必须有