***3层 抽象工厂
面向对象设计模式是对在特定场景下,解决一般设计问题中类与相互通信对象的描述。
工厂依赖于所有的子类产品,客户只需知道父类产品和工厂即可。工厂是整个模式的核心,以不变应万变。它虽然使对象的创建与使用进行了分离,但一次只能创建一个对象。它不能实现一次创建一系列相互依赖对象的需求。
UI ----------------用户接口层
BLL---------------业务逻辑层
DAL---------------数据访问层
Factory
IDAL
-Models------------实例化类
1. 对应关系数据库设计类。每个表对应一个类。
2. 设计UI层。
3. 初步设计BLL层。
4. 搭建访问层基本架构
(1) 新增抽象工厂项目 xxxDALFactory
(2) 新增抽象产品项目 xxxIDAL
(3) 实现依赖关系
1. 实现数据访问接口即抽象产品 IDAL中
在IDAL中设计接口类,一一对应models类文件
Exp:
namespace MySchool.IDAL
{
public interface IStudentService
{
/// <summary>
/// 创建学员账户
/// </summary>
/// <param name="student">学员实体对象</param>
/// <returns>账户信息ID</returns>
int AddSutdent(Student student);
/// <summary>
/// 通过登录ID删除学员信息
/// </summary>
void DeleteStudentByLoginID(string loginID);
/// <summary>
/// 修改学员信息
/// </summary>
/// <param name="student">学员信息实体对象</param>
void ModifyStudent(Student student);
/// <summary>
/// 通过登录ID得到学员实体
/// </summary>
Student GetStudentByLoginID(string loginID);
/// <summary>
/// 得到学员实体对象集合
/// </summary>
IList<Student> GetAllStudents();
/// <summary>
/// 通过登录ID得到学员信息ID
/// </summary>
int GetStudentIDByLoginID(string loginID);
}
}
2. 实现数据库访问对象创建既创建实物产品 DAL中
继承IDAL中对应接口,对接口实现,该层实现数据库SQL查询,与需要对应。例如设计access数据库 sqlServer Oracle等多套类。针对不同的使用实例。
3. 增加AbstractDALFactory类(xxxDALFactory中)
实现工厂加工方法 和 既抽象(产品)方法
Exp:
public abstract class AbstractDALFactory
{
//创建工厂的选择应该用反射实现
public static AbstractDALFactory ChooseFactory()
{
string dbType =
ConfigurationManager.AppSettings["DBType"].ToString();
AbstractDALFactory factory = null;
switch (dbType)
{
case "Sql":
factory = new SqlDALFactory();
break;
case "Access":
factory = new AccessDALFactory();
break;
}
return factory;
}
//数据访问对象创建接口(抽象工厂提供抽象产品)
public abstract IStudentService CreateStudentService();
public abstract IAdminService CreateAdminService();
public abstract IClassService CreateClassService();
public abstract IGradeService CreateGradeService();
}
4. 实现所有实体工厂(xxxDALFactory中)
实现抽象工厂中的抽象方法
Exp:
public class SqlDALFactory : AbstractDALFactory
{
#region Public Methods
/// <summary>
/// 创建学员信息数据访问对象
/// </summary>
public override IStudentService CreateStudentService()
{
return new StudentService();
}
/// <summary>
/// 创建管理信息数据访问对象
/// </summary>
public override IAdminService CreateAdminService()
{
return new AdminService();
}
/// <summary>
/// 创建班级信息数据访问对象
/// </summary>
public override IClassService CreateClassService()
{
return new ClassService();
}
/// <summary>
/// 创建年级信息数据访问对象
/// </summary>
public override IGradeService CreateGradeService()
{
return new GradeService();
}
#endregion
}
5. BLL层调用设计
Exp:引入 using MySchool.IDAL;
using MySchool.DALFactory;
/// <summary>
///调用数据访问层统一数据访问方式
/// </summary>
//返回当前实例工厂
Private static AbstractDALFactory factory
= AbstractDALFactory.ChooseFactory();
//返回当前数据访问方式实例
Private static IStudentService studentService
= factory.CreateStudentService();