***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();

posted @ 2008-10-22 14:58  Edward Xie  阅读(283)  评论(0编辑  收藏  举报