程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .NET抽象工廠模式微理解:教你在項目中實現抽象工廠

.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();
        }
    }

在IAXCBLL層裡面新建一個IPeopleBLL類,該類裡面的內容是AXCBLL業務邏輯層裡面的接口方法,如下:

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

在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>

調用一下我們所寫的方法,方法如下:

最好的效果圖如下:

好了,以上就是本人對於抽象工廠模式的微理解。希望你看完本文也對抽象模式有一個微理解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved