.NET抽象工廠模式微理解--教你在項目中實現抽象工廠

.NET抽象工廠模式微理解--教你在項目中實現抽象工廠web


  最近在學習MVC,對於MVC裏面的一些項目上的東西都和抽象模式有關,今天就微說明一下我的對於抽象工廠模式的理解,以方便學習MVC及工廠模式相關的同事和博友們理解。不足之處,還請斧正!數據庫

  首先簡單闡述一些三層的關係,相信觀看該文章的博友們對於三層設計早已是爛熟於心了,我這邊就簡單說明一下:
用戶界面表示層(Web)
業務邏輯層(BLL)
數據訪問層(DAL)
    1:數據數據訪問層:主要是對原始數據(數據庫或者文本文件等存放數據的形式)的操做層,而不是指原始數據,也就是說,是對數據的操做,而不是數據庫,具體爲業務邏輯層或表示層提供數據服務.
    2:業務邏輯層:主要是針對具體的問題的操做,也能夠理解成對數據層的操做,對數據業務邏輯處理,若是說數據層是積木,那邏輯層就是對這些積木的搭建。
    3:表示層:主要表示WEB方式,也能夠表示成WINFORM方式,WEB方式也能夠表現成:aspx, 若是邏輯層至關強大和完善,不管表現層如何定義和更改,邏輯層都能完善地提供服務。
  下面闡述一些抽象工廠模式的做用,請看圖(該圖爲我一個老師所畫,在這裏給你們簡單看一下) app

OK,言歸正傳,咱們來跟着項目作一個抽象工廠模式的demo
下面新建一個解決方案:以下圖:ide

他們之間的描述及引用關係以下:
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類,屬性(自動屬性)以下:spa

    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層裏的具體的方法的實現,以下(因爲沒有設計數據庫,暫時手動代替一下):code

    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,返回一個具體的數據訪問層實例,以下:blog

    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>

調用一下咱們所寫的方法,方法以下:
最好的效果圖以下:

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

相關文章
相關標籤/搜索