閱讀53 返回首頁    go 阿裏雲 go 技術社區[雲棲]


三層加抽象工廠加反射加配置文件加SqlHelper

              三層的例子敲的差不多了,為了對抽象工廠有個更好的理解,開始對三層進行加工,下麵來對三層進行逐步更新,首先是看一下我畫的包圖:

             

              包圖為大家從宏觀上展示了程序各層之間的調用關係,現在用類圖展示一下詳細的調用關係:

             

             通過包圖和類圖能夠比較清晰的知道各個包之間的調用關係,通過時序,可以清晰的知道這些調用關係的順序,我們在寫代碼的時候是從D層開始寫的,當然沒有那麼絕對,隻不過從D層出發,在寫的過程中會有B層對D層的調用,有時候在寫個層的時候需要先將大致的框架寫出來。

             下麵通過時序圖從U層開始,從用戶角度,將這個程序的執行順序表示出來:

             

             下麵看一下我設計的登錄下例子:

             

                 在這個例子中我對sqlhelper有了更加深刻的理解,sqlhelper,是對所有sql語句(增刪改查)的集合,因為在D層中會有很多類都會用到增刪改查,而這些代碼是重複的,這樣會造成代碼的冗餘,於是就需要SQLHELPER來將這些方法總結一下,sqlhelper就是一些有關數據庫的語句的有參、無參、有返回值、無返回值的函數的集合,當需要哪個函數的時候,我們隻需要在D層調用這些方法,將自己需要的參數寫進去就可以了,這樣減少了代碼重複。

                 而對於配置文件,在之前的博客中,我也提到過appsettings與connectstrings,為什麼要用配置文件呢?一方麵配置文件的使用可以減少源碼的改動,隻需要從txt文件中做改動就可以讓程序的運行達到想要的效果,另一方麵,它實現了解耦。

                 在這個程序中還用到了反射,在我的程序中是這樣用的:

                 在工廠中用反射的時候首先要添加Reflection的引用,首先說明一下下麵的代碼:AssemblyName為程序集名,className為命名空間 .類名,一般情況程序集名和類名是一樣的下,但是如果對命名空間名進行更改,你會發現生成的.dll的名稱依舊是程序集名,所以就想問他倆有什麼區別??

                程序集就是一個項目,多個項目構成一個解決方案,是物理的,將生成EXE以後可以看到到它的名字是程序集.dll,是可以看到的,而命名空間就相當於windows中的一個文件夾,隻是這個文件夾中放的不是文件,而是類,它是邏輯的,看不到。

using System.Reflection;
  public  class DataAccess
    {      
        private static readonly string AssemblyName = "LoginDAL";
        public  IDAL.ISelectUser CreateSelectUser()
        {
            string className = AssemblyName + "." + "UserDAO";
           
            return (ISelectUser)Assembly.Load(AssemblyName).CreateInstance(className);
        }
        public  IUpdateScore CreateUpdateScore()
        {
            string className = AssemblyName + "." + "ScoreDAO";
            return (IUpdateScore)Assembly.Load(AssemblyName).CreateInstance(className);
        }
    }

                     關於三層,可以多多交流,還是理解的不夠透徹,希望和大家分享!
 

             

最後更新:2017-04-03 12:56:01

  上一篇:go 九度1254:N皇後問題
  下一篇:go 九度1465:最簡真分數