机房收费系统重构(三)—工厂+反射+DAL
? 前段時(shí)間用簡(jiǎn)單的三層實(shí)現(xiàn)了窗體登錄功能,心中有點(diǎn)小小的成就感,但是很快就被潑了涼水,機(jī)房收費(fèi)不可能只用三層實(shí)現(xiàn),如果你用三層,也就是說(shuō)后面機(jī)房收費(fèi)所有的功能都必須使用三層來(lái)實(shí)現(xiàn)功能。所以一周前始了七層的研究。經(jīng)過(guò)一個(gè)星期的看博客,總結(jié),調(diào)代碼,終于實(shí)現(xiàn)了窗體登錄,信息錄入,和簡(jiǎn)單充值查詢功能。
? 說(shuō)說(shuō)自己這次七層之旅的總結(jié)吧。
? 1.毋庸置疑,研究一個(gè)窗體功能,我首先判斷的是需要用到數(shù)據(jù)庫(kù)中的哪些表(這是屬于我自己的編程習(xí)慣,不適用全部),然后再實(shí)體層中將表中的字段表示出來(lái),有多少個(gè)表就有多少實(shí)體類,實(shí)體類只會(huì)多于表的數(shù)量!一個(gè)表映射出一個(gè)實(shí)體類,表中的字段就是實(shí)體類的屬性!這里附帶上自己代碼中的一部分吧!
Public Class LoginModelPrivate _userID As StringPrivate _level As StringPrivate _password As StringPrivate _userName As StringPrivate _computer As StringPublic Shared UserHead As String ' 設(shè)置全局變量Public Shared UserLevel As StringPublic Property UserID() As StringGetReturn _userIDEnd GetSet(value As String)_userID = valueEnd SetEnd PropertyPublic Property PassWord() As StringGetReturn _passwordEnd GetSet(value As String)_password = valueEnd SetEnd PropertyPublic Property level() As StringGetReturn _levelEnd GetSet(value As String)_level = valueEnd SetEnd PropertyPublic Property UserName() As StringGetReturn _userNameEnd GetSet(value As String)_userName = valueEnd SetEnd PropertyPublic Property Computer() As StringGetReturn _computerEnd GetSet(value As String)_computer = valueEnd SetEnd Property End Class? 2.接下倆進(jìn)行的是關(guān)于工廠+反射+接口+DAL的介紹了
? 這個(gè)過(guò)程中涉及的東西比較多。我先概括的說(shuō)說(shuō)自己這部分用到了什么知識(shí)吧!
(1) 用反射+抽象工廠的數(shù)據(jù)訪問(wèn)程序
開(kāi)始以為是新知識(shí),但是大家可以看看咱們《設(shè)計(jì)模式》,抽象工廠一章中說(shuō)到反射利用字符串來(lái)實(shí)例化對(duì)象,而變量時(shí)可以更換的!
大家記住一段簡(jiǎn)單的代碼吧:
Assmbly.load("程序集名稱").CreadteInstance("命名空間.類名稱")我把這段話理解為制造接口的過(guò)程。
關(guān)于這部分內(nèi)容會(huì)有專門(mén)的博客寫(xiě)到!
在敲工廠時(shí)會(huì)經(jīng)常出現(xiàn)這樣的錯(cuò)誤:
出現(xiàn)了這個(gè)錯(cuò)誤,查了查博客,下面我只說(shuō)出自己的方法,將DAL中生成輸出路徑,改為UI的生成輸出路徑即可,關(guān)于這個(gè)錯(cuò)誤,有好多詳細(xì)的博客介紹。我就不多說(shuō)了。
(2)接下來(lái)我就開(kāi)始理解關(guān)于工廠,接口和DAL之間的關(guān)系了,,工廠反射,就是防止更換數(shù)據(jù)庫(kù),接著工廠其實(shí)就是生產(chǎn)接口,將DAL中的類生成接口,然后在DAL中調(diào)用接口,來(lái)實(shí)現(xiàn)接口。
? ? 關(guān)于DAL中對(duì)數(shù)據(jù)庫(kù)的增刪改查都是重復(fù)的,這里我們抽象出一個(gè)類Sqlhelper,我們學(xué)的是面向?qū)ο?#xff0c;就是學(xué)會(huì)使用面向?qū)ο蟮乃枷?#xff0c;關(guān)于Sqlhelper博客請(qǐng)看我的這篇博客《機(jī)房收費(fèi)重構(gòu)(四)-SqlHelper》。
Sqlhelper類我寫(xiě)在了DAL的下面,而后面的代碼就會(huì)變得簡(jiǎn)單起來(lái),就是聲明,實(shí)例化,返回值的應(yīng)用了。附上小部分代碼:
<strong><span style="font-size:18px;"> Public Function RechargeQuery(cardno As Model.RechargeModel) As Model.RechargeModel Implements IDAL.IRecharge.RechargeQueryDim sqlparams As SqlParameter() = {New SqlParameter("@CardNo", cardno.StuInfoQuery)}Dim strText As String = "select * from T_StuInfo where CardNo =@CardNo"Dim helper As New SqlHelperDim cmdtype As CommandType = New CommandType()cmdtype = CommandType.TextDim table As DataTableDim Ucardno As New Model.RechargeModeltable = helper.ExecuteQuery(strText, cmdtype, sqlparams)If table.Rows.Count <> 0 ThenUcardno.StuInfoQuery = table.Rows(0).Item("CardNo")End IfReturn UcardnoEnd Function</span></strong>其實(shí)在這一部分還會(huì)有關(guān)于存儲(chǔ)過(guò)程的介紹,但是介于篇幅的影響就不向大家介紹了。?這篇文章純屬個(gè)人理解,如有錯(cuò)誤理解,歡迎大家踴躍拍磚!
? 接下來(lái)我會(huì)向大家介紹BLL和外觀層的理解
轉(zhuǎn)載于:https://www.cnblogs.com/xzpblog/p/5117983.html
總結(jié)
以上是生活随笔為你收集整理的机房收费系统重构(三)—工厂+反射+DAL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vim 配置svn
- 下一篇: Linux系统下的数据镜像备份工具——R