机房重构 之 抽象工厂+反射+配置文件 实现数据库訪问
重構(gòu)機(jī)房已經(jīng)開始三個(gè)多星期了,從剛開始的一頭霧水,到如今的柳暗花明,由開始的無從下手,到如今感覺猶
如脫胎換骨了般。和兩個(gè)星期前相比。如今明朗了多了,心情也好了不少。
先給大家看一下這次重構(gòu)的總體架構(gòu)圖:
在前面一篇博文中對(duì)三層(UI、BLL、DAL、Entity)http://blog.csdn.net/zhangzijiejiayou/article/details/38226135做了具體的介紹。
本篇博客著重總結(jié)一下在三層的基礎(chǔ)上我所做的改進(jìn),也就是傳說中的七層。
1.Facade層(外觀層)
定義:為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口。這個(gè)接口使得這一子系統(tǒng)更加easy使用。
個(gè)人理解:外觀模式就好像一個(gè)文件夾,將全部的方法都整合在了該層(就像接口似的),是一個(gè)節(jié)點(diǎn)。U層須要什么就直接從外觀層調(diào)用,降低了U層與B層的耦合。方便了用戶對(duì)方法的調(diào)用。
機(jī)房重構(gòu)登陸窗口為例,給大家分享一下代碼:
<span style="font-family:KaiTi_GB2312;font-size:18px;">''' <summary>''' 驗(yàn)證登陸''' </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 '實(shí)例化b層Dim dt As boolean '定義dt為集合類型dt = selectfaced.SelectUserBLL(enUser) '調(diào)用b層函數(shù)Return dtEnd Function</span>2.抽象工廠+反射+配置文件—實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問
抽象工廠:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對(duì)象的接口。而無需指定它們?cè)敿?xì)的類。
以下是我的抽象工廠的一個(gè)方法
<span style="font-family:KaiTi_GB2312;font-size:18px;">Imports System.Reflection '引入反射 Imports System.Configuration '引用程序集 Imports ChargeIDAL '引用接口Public Class ChargeT_UsersFactoryPrivate 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_UsersIDALDim iselect As ChargeIDAL.ChargeT_UsersIDALDim className As String = "ChargeDAL" + "." + db + "ChargeT_UsersDAL" '拼接字符串實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問iselect = CType(Assembly.Load(AssemblyName).CreateInstance(className), ChargeT_UsersIDAL)Return iselectEnd Function</span>配置文件:App.config,存在于UI層。
<span style="font-family:KaiTi_GB2312;font-size:18px;">1一般格式:<configuration> 2<configSections> //配置節(jié)聲明區(qū)域。包括配置節(jié)和命名空間聲明 3<section> //配置節(jié)聲明 4 <sectionGroup> //定義配置節(jié)組 5 <section> //配置節(jié)組中的配置節(jié)聲明 6<appSettings> //提前定義配置節(jié) 7<Custom element for configuration section> //配置節(jié)設(shè)置區(qū)域 </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時(shí)注意更改D層對(duì)應(yīng)的類名
為:配置文件里DB的名字+類名。或者上例工廠中去掉DB不改D層類名也可。
?
反射:提供了封裝程序集、模塊和類型的對(duì)象。
上面的我的抽象工廠中已經(jīng)用到不在累述。
3.接口:B層通過接口調(diào)用D層的方法,不直接和數(shù)據(jù)庫(kù)打交道。降低了B層和D層的耦合,保證了安全。
? 我的部分接口:
<span style="font-family:KaiTi_GB2312;font-size:18px;">mports ChargeEntityPublic Interface ChargeT_UsersIDAL'定義登陸接口Function SelectUsers(enUser As ChargeEntity.ChargeT_UsersEntity) As List(Of ChargeEntity.ChargeT_UsersEntity)'定義改動(dòng)password接口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 IntegerEnd Interface</span>個(gè)人點(diǎn)睛:外觀層和接口層事實(shí)上是一樣的。降低了各層的耦合,使調(diào)用方法更加方便。通過抽象工廠來創(chuàng)建接
口,I層定義接口。D層來實(shí)現(xiàn)接口。也就是所謂的面向接口編程。
通過抽象工廠+反射+配置文件實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的訪
問。使將來更換數(shù)據(jù)庫(kù)時(shí)更加靈活方便。
分層事實(shí)上就像搭建房屋一樣。骨架搭建好了(分層)。剩下的就是慢慢地就
是一摞一摞(一條條線)地砌磚即可了。
轉(zhuǎn)載于:https://www.cnblogs.com/gcczhongduan/p/5223626.html
總結(jié)
以上是生活随笔為你收集整理的机房重构 之 抽象工厂+反射+配置文件 实现数据库訪问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JMS--ActiveMq与spring
- 下一篇: 2016.2.29(异常)