文章出處

前面兩個已經學習簡單三層到簡單工廠模式的變化,但是簡單工廠模式還是有個缺點,就是簡單工廠中集合了所有的實例的創建。也不是很好。

現在想到使用抽象工廠的方式來實現這個:

我們在程序集中加上下面的代碼:

<appSettings>
  <!--命名空間-->
  <add key="DALNameSpace" value="DAL"/>
  <!--程序集-->
  <add key="DALAssembly" value="DAL"/>
</appSettings>

然后新建一個抽象工廠類:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;
using IDAL;
namespace DALFactory
{
   public class DALAbstractFactory
    {
       /// <summary>
       ///命名空間
       /// </summary>
       public static string DALNameSpace
       {
           get 
           {
               return ConfigurationManager.AppSettings["DALNameSpace"];
           }
       }

       /// <summary>
       /// 程序集
       /// </summary>
       public static string DALAssembly 
       {
           get 
           {
               return ConfigurationManager.AppSettings["DALAssembly"];
           }
       }

       public IClassDAL GetClassInstance()
       {
           string fullNameSpace = DALNameSpace + ".ClassDAL";

          return CreateInstance(fullNameSpace, DALAssembly) as IDAL.IClassDAL;
       }

       /// <summary>
       /// 創建實例
       /// </summary>
       /// <param name="fullClassNameSpace"></param>
       /// <param name="assembly"></param>
       public static object CreateInstance(string fullClassNameSpace,string assembly)
       {
          var DALAssembly=  Assembly.Load(assembly);

         return DALAssembly.CreateInstance(fullClassNameSpace);
       }

    }
}

上面的方法,通過反射,創建DAL數據訪問層的實例。

現在在業務層,我們可以這樣:

using DAL;
using Entity;
using IDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public class ClassBLL
    {
        //耦合度太高
       // ClassDAL dal = new ClassDAL();

        //這種還是有耦合,業務層和數據訪問層耦合度太高

       //IClassDAL dal = new ClassDAL();

        //引入簡單工廠模式

        //IClassDAL dal = DALFactory.DALFactory.GetClassInstance();

        //引入抽象工廠
        IClassDAL dal = DALFactory.DALAbstractFactory.GetClassInstance();

        /// <summary>
        /// 獲取Class列表
        /// </summary>
        /// <returns></returns>
        public List<ClassEntity> GetList()
        {
            return dal.GetList();
        }
    }
}

效果圖:

 


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()