生活随笔
收集整理的這篇文章主要介紹了
三层之抽象工厂加反射实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
C#版的三層登陸實(shí)例,只是為了學(xué)習(xí)三層而實(shí)現(xiàn)的。為了接下來需要進(jìn)行的vb.net版機(jī)房收費(fèi)系統(tǒng)。根據(jù)上次的C#改編的vb.net版本登陸實(shí)例。不過在驗(yàn)收的時候發(fā)現(xiàn)了很多問題,所以進(jìn)行了修改。
???花費(fèi)好幾天的時間,終于從C#轉(zhuǎn)化成了vb.net版本。期間參考了一些師哥師姐的博客來理解三層是如何交互的。
起初上一篇實(shí)例,并不是很懂,只是理解了個大概。然后根據(jù)那么多材料來進(jìn)行對比。終于看懂他們是怎么進(jìn)行操作的。就說看了那么多不同樣式的實(shí)例之后,才知道誰的設(shè)計方案更好。知識是不變的,但是設(shè)計理念就能看出代碼執(zhí)行效率的高低。
?
???在使用三層的過程中,才能真正體會到,什么叫高內(nèi)聚,低耦合。在程序發(fā)現(xiàn)錯誤之后,能把錯誤的細(xì)節(jié)定位到具體一層,甚至具體一類。僅僅修改或更換這一類就能調(diào)試出來。使得調(diào)試代碼的量變的極底。這就是使用三層的好處吧。
???以下是本實(shí)例的設(shè)計,這個實(shí)例是模仿上篇實(shí)例得到的。所以名稱有些不規(guī)范,請見諒。
?
數(shù)據(jù)庫還是使用的上次的數(shù)據(jù)可,沒有變動。
?
通過對實(shí)例的不斷分解,單一職責(zé)劃分。得到下圖的引用關(guān)系。
?
接下來看一下各個層次的代碼:
?
UI層:
?
[vb] view plaincopy
Public?Class?Form1????????Private?Sub?btnLogin_Click(sender?As?Object,?e?As?EventArgs)?Handles?btnLogin.Click??????????Try??????????????Dim?user1?As?New?Login.Moudel.UserInfoEntity??????????????Dim?user2?As?New?Login.Moudel.UserInfoEntity????????????????????user2.USERNAME?=?txtUserName.Text.Trim??????????????user2.PASSWORD?=?txtPassword.Text????????????????Dim?mgr?As?New?Login.BLL.LoginManager??????????????user1?=?mgr.SelectUserLogin(user2)??????????????????????MessageBox.Show("登陸用戶:"?+?user1.USERNAME)?????????????????Catch?ex?As?Exception??????????????MessageBox.Show(ex.Message.ToString())????????????????End?Try????????End?Sub??????????????Private?Sub?btnExit_Click(sender?As?Object,?e?As?EventArgs)?Handles?btnExit.Click??????????End??????End?Sub??End?Class??
B層:
[vb] view plaincopy
Public?Class?LoginManager??????Function?SelectUserLogin(ByVal?User?As?Login.Moudel.UserInfoEntity)?As?Login.Moudel.UserInfoEntity??????????Dim?bUser?As?LoginIDAL.IUser??????????bUser?=?Factory.DataAccess.CreateUser()????????????Dim?rUser?As?New?Login.Moudel.UserInfoEntity?????????????????rUser?=?bUser.SelectUser(User)?????????????????????If?IsNothing(rUser.USERNAME)?Then?????????????????????Throw?New?Exception("用戶名?不存在")??????????End?If????????????If?rUser.PASSWORD?=?User.PASSWORD?Then????????????????Return?rUser??????????Else??????????????Throw?New?Exception("登陸失敗,請檢查用戶名密碼")??????????End?If??????End?Function??End?Class??
D層:
[vb] view plaincopy
Public?Class?DbConnStr??????Public?Shared?Function?Connstring()?As?String??????????Connstring?=?"Server=zc-pc;Database=UBDLogin;User?ID=sa;?Password=123456"??????End?Function??End?Class??
?
[vb] view plaincopy
Imports?System.Data.SqlClient??Imports?System.Data????Public?Class?SqlServerDAO?:?Implements?LoginIDAL.IUser??????Function?SelectUser(ByVal?user?As?Login.Moudel.UserInfoEntity)?As?Login.Moudel.UserInfoEntity?Implements?LoginIDAL.IUser.SelectUser??????????Dim?conn?As?New?SqlConnection??????????????????????Dim?cmd?As?New?SqlCommand?????????????????????????conn?=?New?SqlConnection(DbConnStr.Connstring())??????????????cmd.Connection?=?conn????????????cmd.CommandText?=?"Select?*?from?Users?Where?UserName=@UserName"???????????cmd.Parameters.Add(New?SqlParameter("@UserName",?user.USERNAME))????????????????????cmd.CommandType?=?CommandType.Text??????????conn.Open()????????????Dim?reader?As?SqlDataReader?=?cmd.ExecuteReader??????????????????Dim?rUser?As?New?Login.Moudel.UserInfoEntity????????????????????????While?(reader.Read())??????????????rUser.USERNAME?=?reader.GetString(1)??????????????rUser.PASSWORD?=?reader.GetString(2)??????????????rUser.LEVEL?=?reader.GetString(3)??????????????rUser.EMAIL?=?reader.GetString(4)??????????End?While????????????Return?rUser??????????????conn.Close()????????End?Function??End?Class??
IDAL:
?
[vb] view plaincopy
Public?Interface?IFactory????????????????Function?CreateUser()?As?LoginIDAL.IUser??End?Interface??
[vb] view plaincopy
Public?Interface?IUser??????Function?SelectUser(ByVal?user?As?Login.Moudel.UserInfoEntity)?As?Login.Moudel.UserInfoEntity??End?Interface??
Entity:
[vb] view plaincopy
Public?Class?UserInfoEntity??????Private?_userID?As?String??????Private?_userName?As?String??????Private?_password?As?String????????Public?Property?USERNAME()?As?String???????????????Get??????????????Return?_userName??????????End?Get??????????Set(value?As?String)??????????????_userName?=?value??????????End?Set??????End?Property????????Public?Property?PASSWORD()?As?String?????????????Get??????????????Return?_password??????????End?Get??????????Set(value?As?String)??????????????_password?=?value??????????End?Set??????End?Property??????End?Class??
總結(jié):三層架構(gòu),只是一種設(shè)計理念。幫助我們來優(yōu)化代碼,降低代碼之間的耦合。僅僅通過幾天的學(xué)習(xí),是不可能全部掌握的。這種東西,就好比學(xué)習(xí) 面向?qū)ο蟮?思想, 需要在長期的實(shí)踐 應(yīng)用中,才能體會到里面的精髓。
總結(jié)
以上是生活随笔為你收集整理的三层之抽象工厂加反射实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。