機房重構 抽象工廠+反射+設定檔

來源:互聯網
上載者:User

標籤:三層架構   架構   設計模式   編程   vb.net   

  重構機房已經開始三個多星期了,從剛開始的一頭霧水,到現在的柳暗花明,由開始的無從下手,到現在感覺猶

如脫胎換骨了般。和兩個星期前相比,現在明朗了多了,心情也好了不少。

  先給大家看一下這次重構的整體架構圖:


  在前面一篇博文中對三層(UI、BLL、DAL、Entity)http://blog.csdn.net/zhangzijiejiayou/article/details/38226135做了詳細的介紹。

本篇部落格著重總結一下在三層的基礎上我所做的改進,也就是傳說中的七層。

1.Facade層(外觀層)

  定義:為子系統中的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

  個人理解:面板模式就好像一個目錄,將所有的方法都整合在了該層(就像介面似的),是一個節點,U層需要什麼就直接從外觀層調用,減少了U層與B層的耦合,方便了使用者對方法的調用。

機房重構登陸表單為例,給大家分享一下代碼:

<span style="font-family:KaiTi_GB2312;font-size:18px;">''' <summary>    ''' 驗證登陸    ''' </summary>    ''' <param name="enUser"></param>    ''' <returns>ture or false</returns>    ''' <remarks></remarks>    Public Function select_faced(enUser As ChargeEntity.ChargeT_UsersEntity) As  boolean        Dim selectfaced As New ChargeManagerBLL  '執行個體化b層        Dim dt As boolean     '定義dt為集合類型        dt = selectfaced.SelectUserBLL(enUser)                  '調用b層函數        Return dt    End Function</span>

2.抽象工廠+反射+設定檔—實現資料庫訪問

  抽象工廠:提供一個建立一系列相關或相互依賴對象的介面,而無需指定它們具體的類。

下面是我的抽象工廠的一個方法

<span style="font-family:KaiTi_GB2312;font-size:18px;">Imports System.Reflection      '引入反射Imports System.Configuration   '引用程式集Imports ChargeIDAL             '引用介面Public Class ChargeT_UsersFactory    Private Shared ReadOnly AssemblyName As String = "ChargeDAL"         '聲明程式集名    Private Shared ReadOnly db As String = ConfigurationManager.AppSettings("DB")  '    ''' <summary>    ''' 使用者登陸    ''' </summary>    ''' <returns>ture or false</returns>    ''' <remarks></remarks>    Public Function SelectUsers() As ChargeT_UsersIDAL        Dim iselect As ChargeIDAL.ChargeT_UsersIDAL        Dim className As String = "ChargeDAL" + "." + db + "ChargeT_UsersDAL"    '拼接字串實現資料庫訪問        iselect = CType(Assembly.Load(AssemblyName).CreateInstance(className), ChargeT_UsersIDAL)        Return iselect    End Function</span>

  設定檔:App.config,存在於UI層。

<span style="font-family:KaiTi_GB2312;font-size:18px;">1一般格式:<configuration>   2<configSections> //配置節聲明地區,包含配置節和命名空間聲明   3<section> //配置節聲明   4  <sectionGroup> //定義配置節組   5   <section> //配置節組中的配置節聲明   6<appSettings> //預定義配置節   7<Custom element for configuration section> //配置節設定地區  </span>

  我的設定檔:

<span style="font-family:KaiTi_GB2312;font-size:18px;">?xml version="1.0" encoding="utf-8" ?><configuration>    <startup>        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />    </startup>     <appSettings>          <add key="DB" value="Sqlserver"/>                  <add key ="sqlConnect" value ="Data source=.; Database =ChargeSystem; User ID = sa;Password = 123456 "/>      </appSettings>  </configuration></span>

  注意:寫好設定檔要引用System.Configuration。注意工廠中拼接字串中有DB時注意更改D層相應的類名

為:設定檔中DB的名字+類名。或者上例工廠中去掉DB不改D層類名也可。

 

  反射:提供了封裝程式集、模組和類型的對象。上面的我的抽象工廠中已經用到不在累述。

3.介面:B層通過介面調用D層的方法,不直接和資料庫打交道,減少了B層和D層的耦合,保證了安全。

   我的部分介面:

<span style="font-family:KaiTi_GB2312;font-size:18px;">mports ChargeEntity Public Interface ChargeT_UsersIDAL    '定義登陸介面    Function SelectUsers(enUser As ChargeEntity.ChargeT_UsersEntity) As List(Of ChargeEntity.ChargeT_UsersEntity)    '定義修改密碼介面    Function ChangePWD_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Boolean    '定義添加使用者介面    Function AddUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Integer    '定義查詢使用者介面    Function FindUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As List(Of ChargeEntity.ChargeT_UsersEntity)    '定義刪除使用者介面    Function DeleteUser_DAL(enUser As ChargeEntity.ChargeT_UsersEntity) As Integer End Interface</span>

  個人點睛:外觀層和介面層其實是一樣的,減少了各層的耦合,使調用方法更加方便。通過抽象工廠來建立接

口,I層定義介面,D層來實現介面。也就是所謂的面向介面編程。通過抽象工廠+反射+設定檔實現了資料庫的訪

問,使將來更換資料庫時更加靈活方便。分層其實就像搭建房屋一樣,骨架搭建好了(分層),剩下的就是慢慢地就

是一摞一摞(一條條線)地砌磚就行了。



機房重構 抽象工廠+反射+設定檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.