• .NET抽象工厂模式微理解--教你在项目中实现抽象工厂


    .NET抽象工厂模式微理解--教你在项目中实现抽象工厂


      最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的同事和博友们理解。不足之处,还请斧正!

      首先简单阐述一些三层的关系,相信观看该文章的博友们对于三层设计早已经是烂熟于心了,我这边就简单说明一下:
    用户界面表示层(Web)
    业务逻辑层(BLL)
    数据访问层(DAL)
        1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
        2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
        3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
      下面阐述一些抽象工厂模式的作用,请看图(该图为我一个老师所画,在这里给大家简单看一下) 

    OK,言归正传,我们来跟着项目做一个抽象工厂模式的demo
    下面新建一个解决方案:如下图:

    他们之间的描述及引用关系如下:
    AXCModel层:实体类层
    AXCDAL层:数据访问层
    IAXCDAL层:数据访问层接口
    AXCFactoryDAL层:数据访问工厂设计
    AXCBLL层:业务逻辑层
    IAXCBLL层:业务逻辑层接口
    AXCFactory层:业务逻辑层工厂设计
    AXCWeb层:表现层
    接口之间的引用关系如下:
    IAXCDAL层和IAXCBLL层引用AXCModel层
    AXCDAL层引用IAXCDAL层和AXCModel层
    AXCBLL层引用AXCFactoryDAL层和IAXCBLL层和IAXCDAL层和AXCModel层
    工厂之间的引用:
    AXCFactoryDAL层引用AXCDAL层和IAXCDAL层
    AXCFactory层引用AXCBLL层和IAXCBLL层
    表现层引用:
    AXCWeb层引用AXCFactory层和IAXCBLL层和AXCModel层

      下面我们就以一个简单的获取记录条数为功能实现抽象工厂模式:
    在AXCModel层里面新建一个PeopleModel类,属性(自动属性)如下:

        public class PeopleModel
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
            public bool Sex { get; set; }
        }

    在IAXCDAL层里面新建一个IPeopleDAL类,该类里面的内容是AXCDAL数据访问层里面的接口方法,如下:

        public interface IPeopleDAL
        {
            List<AXCModel.PeopleModel> getPeopleList();
        }

    在AXCDAL层里面新建一个PeopleDAL类,继承IPeopleDAL类,该类里面的内容是IAXCDAL层里的具体的方法的实现,如下(由于没有设计数据库,暂时手动代替一下):

        public class PeopleDAL:IAXCDAL.IPeopleDAL
        {
    
            public List<AXCModel.PeopleModel> getPeopleList()
            {
                List<AXCModel.PeopleModel> People = new List<AXCModel.PeopleModel>(){
                 new  AXCModel.PeopleModel(){ Id=1,Name="艾新草",Age=25,Sex=false},
                 new  AXCModel.PeopleModel(){ Id=2,Name="艾新草1",Age=23,Sex=true},
                 new  AXCModel.PeopleModel(){ Id=3,Name="艾新草2",Age=22,Sex=false}
                };
                return People;
            }
        }

    在AXCFactoryDAL层里新建一个抽象类:AbsFactoryDAL,该类实现了读取配置文件中的配置的数据访问层,方便实现支持多数据库开发,如下,

        public abstract class AbsFactoryDAL
        {
            /// <summary>
            /// 根据配置文件 获取 实体数据工厂 对象
            /// </summary>
            /// <returns></returns>
            public static AbsFactoryDAL GetFatory()
            {
                string strType = System.Configuration.ConfigurationManager.AppSettings["dalType"].ToString();
                AbsFactoryDAL dalFactory = null;
                switch (strType)
                {
                    case "dal":
                        dalFactory = new DALFatory();
                        break;
                  
                }
                return dalFactory;
            }
            public abstract IAXCDAL.IPeopleDAL GetPeople();
        }

    在新建一个DALFatory类,该类继承了AbsFactoryDAL,返回一个具体的数据访问层实例,如下:

        public class DALFatory : AbsFactoryDAL
        {
    
            public override IAXCDAL.IPeopleDAL GetPeople()
            {
                return new AXCDAL.PeopleDAL();
            }
        }
    View Code

    在IAXCBLL层里面新建一个IPeopleBLL类,该类里面的内容是AXCBLL业务逻辑层里面的接口方法,如下:

        public interface IPeopleBLL
        {
            List<AXCModel.PeopleModel> getPeopleList();
        }
    View Code

    在AXCBLL层里面新建一个PeopleBLL类,继承IPeopleBLL类,该类里面的内容是IAXCBLL层里的具体的方法的业务实现,如下:

        public class PeopleBLL:IAXCBLL.IPeopleBLL
        {
           // IAXCDAL.IPeopleDAL IPeopleDal =null;
            /// <summary>
            /// 数据抽象工厂 - 由抽象工厂类的 静态方法创建   : 父类 obj = new 子类();
            /// </summary>
            AXCFactoryDAL.AbsFactoryDAL absFactoryDAL = AXCFactoryDAL.AbsFactoryDAL.GetFatory();
           
            public List<AXCModel.PeopleModel> getPeopleList()
            {
                IAXCDAL.IPeopleDAL IPeopleDal = absFactoryDAL.GetPeople();
                return IPeopleDal.getPeopleList();
            }
        }

    与在AXCFactoryDAL层里新建工厂差不多,在AXCFactory层里新建一个抽象类:AbsFactoryBLL,该类实现了读取配置文件中的配置的业务逻辑层,方便实现支持多数据库开发多个业务逻辑层,如下,

            /// <summary>
            /// 根据配置文件 获取 实体业务工厂 对象
            /// </summary>
            /// <returns></returns>
            public static AbsFactoryBLL GetFatory()
            {
                string strType = System.Configuration.ConfigurationManager.AppSettings["bllType"].ToString();
                AbsFactoryBLL bllFactory = null;
                switch (strType)
                {
                    case "bll":
                        bllFactory = new BLLFatory();
                        break;
                     
                }
                return bllFactory;
            }
    
            public abstract IAXCBLL.IPeopleBLL GetPeople();
        }

    在新建一个BLLFatory类,该类继承了AbsFactoryBLL,返回一个具体的业务逻辑层实例,如下:

        public class BLLFatory :AbsFactoryBLL
        {
            public override IAXCBLL.IPeopleBLL GetPeople()
            {
                return new AXCBLL.PeopleBLL();
            }
        }

    好了,基础的工作我们已经完成的差不多了,现在就在web层里配置一下webconfig文件,如下:

       <appSettings>
          <add key="bllType" value="bll"/>
        <add key="dalType" value="dal"/>
      </appSettings>

    调用一下我们所写的方法,方法如下:
    最好的效果图如下:

    好了,以上就是本人对于抽象工厂模式的微理解。希望你看完本文也对抽象模式有一个微理解。

  • 相关阅读:
    结对练习(能力有限,待解决......)
    骰子修改
    骰子传奇
    现在的辛苦一点,会是将来的更好一点!
    入坑?那就从坑里爬出来
    性能测试工具locust简单应用
    阿里云环境部署
    Charles的安装与抓取手机包设置
    windows常用命令-netstat
    采坑小记——adb链接夜神模拟器
  • 原文地址:https://www.cnblogs.com/aixincao/p/3637860.html
Copyright © 2020-2023  润新知