C#機房重構- - -DAL層工廠優化

前言:

    因爲第一版機房重構是一個功能就需要對應一個工廠,所以我個人覺得工廠的代碼重複率高也不需要怎麼多個工廠。雖然第一版有想法但是沒有實現思路,所以就先這樣用着。到後面這幾版逐漸的有思路了,而且對機房重構也比較清晰了。所以有想法很重要,目前能不能實現(不是很重要)!

優化前的代碼:

 /// <summary>
    /// 登錄工廠
    /// </summary>
    public class LoginFactory
    {
        //獲取配置文件
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        //應用反射獲得DAL層操作,來返回D層的登錄查詢類。
        public LoginIDAL CreateUser()
        {
            string ClassName = StrDB + "." + "LoginDal";
            return (LoginIDAL)Assembly.Load(StrDB).CreateInstance(ClassName);
        }
    }

大家可以腦補下,每一個功能都需要一個對應的工廠。機房收費系統有多少功能,得用多少工廠? 這個問題大家一思考是不是覺得特別可怕。 而且代碼重複率高達百分之九十,甚至還多。

上面這張圖片裏除了我畫紅圈的地方以外,剩下的代碼都是重複代碼。大家可以和下面這個優化完之後的代碼做一個對比,效果很明顯。

優化後的代碼:

 //獲取配置文件,要實例化的程序集名稱。
        string StrDB = System.Configuration.ConfigurationManager.AppSettings["DB"];
        /// <summary>
        ///應用反射獲得DAL層操作,來返回D層的登錄查詢類。
        ///缺點:數據類型是死的,不同數據類型的工廠調用需要在調用處強制轉換。
        /// </summary>
        /// <param name="CreatClassName">要實例化的類</param>
        /// <returns>d層具體查詢</returns>
        public object CreateUser(string CreatClassName)
        {
            //具體要實例化的類
            string ClassName = StrDB + "." +CreatClassName;
            //利用反射返回要實例化的具體類
            return (object)Assembly.Load(StrDB).CreateInstance(ClassName);
        }

優化之後的代碼裏,把上面寫死的那個具體要創建的對象改成了參數。這樣就可以根據傳不同的參數,來實例化不同的對象。也減少了很多重複性的代碼。

BLL層調用:

 //利用反射,實例化D層登錄查詢類
                LoginIDAL idal = (LoginIDAL)fact.CreateUser("LoginDal");

調用代碼就是在原來的基礎上機加個參數,和進行下類型轉換。(註釋:因爲默認工廠類型是object類型)

 

發佈了73 篇原創文章 · 獲贊 29 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章