三层架构之泛型抽象工厂
原来写过一篇三层架构之泛型应用的简单登录,已经过去2年了,今天有一朋友问我关于抽象工厂的问题,就把自己后来解耦的方法从项目中拿出来了,方便大家学习。
我重新写了一个例子项目,如下截图:
XU.Model层中有一个抽象类BaseModel.cs,User.cs是用户实体类,继承与BaseModel类,是用于类型安全考虑的
BaseModel.cs
User.cs
XU.FactoryDAL层是用于反射获取实例,其中只有一个类
DataAccess<T>.cs
XU.IDAL层依赖与XU.Model,其中包含一个基接口IBaseDAL.cs,还有一个用于定义一些基接口中没有方法的接口IUserDAL,继承与基接口IBaseDAL<T>
IBaseDAL<T>.cs
IUserDAL.cs
实现XU.IDAL中接口有2个类库,一个是MSSQL方案,一个是MYSQL方案,这2个类库都依赖于XU.Model和XU.IDAL,下面是实现方案
XU.MSSQLDAL的实现如下
UserDAL.cs
XU.MYSQLDAL的实现如下
UserDAL.cs
XU.BLL业务逻辑层中包含了一个用于继承的基类BaseBLL<T>和用户业务逻辑UserBLL类,这层依赖XU.IDAL,XU.Model,XU.FactoryDAL库
BaseBLL.cs
UserBLL.cs
XU.ConsoleDemo是一个控制台程序,本准备弄一个网站测试,觉得麻烦,用这个讲解抽象工厂更简单和直观
App.config
Program.cs
注意:XU.ConsoleDemo是不会直接引用XU.MSSQLDAL和XU.MYSQLDAL的,但是XU.ConsoleDemo中的Debug目录下要把编译好的XU.MSSQLDAL.dll和XU.MYSQLDAL.dll放进去,如果是网站就要放入网站中的Bin文件夹下