浅谈三层架构(2)
感受:
? ? 對于三層的學(xué)習(xí),自己剛開始的感覺真的是一頭霧水啊。當(dāng)時(shí)真的出現(xiàn)了非常煩躁的感覺,我想這樣的感覺的出現(xiàn)真的是非常可怕的,就這樣耽誤了兩天,在網(wǎng)上也搜尋者自己想要的資料,昨天四姐也好心給調(diào)試了一番,頓時(shí)把自己的大腦打通了。事實(shí)上問題難不難。就在于能不能打開思路了!
VB.NET的三層實(shí)現(xiàn):
? ? ?上篇文章主要是對于三層有了一個(gè)表面的理解,以下針對機(jī)房收費(fèi)登陸界面來進(jìn)行一下簡單的理解:
? ? ?UI層主要就是表面的構(gòu)建。多以須要使用windows窗口來完畢,而其它BLL和DAL則不須要。之間建立一個(gè)類庫則能夠完畢自己所須要的功能。
三層的詳細(xì)表現(xiàn)形式:
對于三層的設(shè)計(jì)。要用一個(gè)實(shí)體層來調(diào)節(jié):
? ? ?實(shí)體層是全然面向?qū)ο蟮乃枷?#xff0c;作為數(shù)據(jù)的載體。在各個(gè)層之間傳遞。使用實(shí)體層的長處就是降低錯(cuò)誤的發(fā)生,舉一個(gè)最簡單的樣例:
? ? ?DAL中有一個(gè)Select方法,須要用到Username,PWD,Head三個(gè)類,使用實(shí)體層的話,則僅僅須要傳遞User這一個(gè)類就可,極大的減少了系統(tǒng)出錯(cuò)的可能。
游刃當(dāng)中的Entity層:
Public Class Models'//定義的私有屬性Private _userID As StringPrivate _PWD As String'定義屬性過程,通過屬性過程,才干同意它的類來訪問Public Property userID() As String '將user表中的每個(gè)數(shù)據(jù)都傳上去,實(shí)體是依據(jù)表來建立的GetReturn _userIDEnd GetSet(value As String)_userID = valueEnd SetEnd Property前方招待的UI層:
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.ClickDim mgr As New Login.BLL.UserBLL '實(shí)例業(yè)務(wù)層Dim user As New Entity.Models '實(shí)例實(shí)體Dim users As New Entity.Models '接收實(shí)體,用于接收UserLogin()返回的數(shù)據(jù)類型,實(shí)例化的標(biāo)準(zhǔn)必須加newuser.userID = txtUserName.Text.Trim() '給實(shí)體層傳入值user.PWD = txtPassword.Text.Trim()If txtUserName.Text = " " Then '推斷輸入是否正確MsgBox("username不能為空!") Return End If If txtPassword.Text = " " Then '推斷password是否輸入正確 MsgBox("password不能為空!") Return End If Try users = mgr.UserLogin(user) If (users.userID Is Nothing And users.PWD Is Nothing) Then '假設(shè)user不為空,則能夠進(jìn)行下一步登陸 MsgBox("登陸失敗。username和password不匹配") Return Else MsgBox("登陸成功!登陸用戶: " + user.userID) End If Catch ex As Exception MsgBox(ex.Message()) '有錯(cuò)誤則提示錯(cuò)誤窗口 End Try End Sub
掌管中心的BLL層:
Public Class UserBLLFunction UserLogin(ByVal user As Entity.Models) As Entity.ModelsDim uDAL As New Login.DAL.UserDAL '實(shí)例化了DAl中的UserDALDim users As New Entity.Models '實(shí)例化實(shí)體層信息表users = uDAL.SelectUser(user) 'SelectUser方法返回一個(gè)實(shí)體類,給他賦值UserReturn usersEnd Function End Class默默奉獻(xiàn)的DAL層: Public Function SelectUser(ByVal user As entity.models) As entity.models '對user中增加一個(gè)selectuser的方法Dim conn As SqlConnection '定義連接打開數(shù)據(jù)庫Dim cmd As New SqlCommand '定義數(shù)據(jù)庫命令conn = New SqlConnection("Server=huoyajing; Database=charge_sys; User ID=sa ;Password=123456") '實(shí)例化SQLUtil中返回的字符串cmd.Connection = conncmd.CommandText = "select * from User_Info Where userID=@UserID and PWD=@Password" '存儲(chǔ)過程cmd.Parameters.Add(New SqlParameter("@UserID ", user.userID)) '賦值,傳參cmd.Parameters.Add(New SqlParameter("@Password", user.PWD))cmd.CommandType = CommandType.Textconn.Open() '打開連接Dim reader As SqlClient.SqlDataReader '讀取數(shù)據(jù)庫中的表reader = cmd.ExecuteReader()Dim users As New Entity.Models '實(shí)例化實(shí)體While (reader.Read()) '無錯(cuò)誤,則持續(xù)運(yùn)行users.userID = reader.GetString(reader.GetOrdinal("userID")) '調(diào)用一次GetOrdinal方法,便在循環(huán)中使用users.PWD = reader.GetString(reader.GetOrdinal("PWD"))End Whileconn.Close()Return usersEnd Function通過登錄窗口。對于三層也有了一個(gè)大概的了解,下邊說說其優(yōu)缺點(diǎn):
長處:
- 1)安全性高。極大的減少了錯(cuò)誤的發(fā)生率;
- 2)三層的目的就是為了實(shí)現(xiàn)“高內(nèi)聚。低耦合”。達(dá)到了解耦的目的;
- 4)減輕了開發(fā)者的大腦思維。他們能夠僅僅關(guān)注于整個(gè)結(jié)構(gòu)中的某一層;
- 5)項(xiàng)目分工明白,適應(yīng)性非常強(qiáng)。有利于對代碼的改動(dòng)以及后期的維護(hù)與升級。
缺點(diǎn):
- 1)添加了代碼量。添加了工作量。
- 2)因?yàn)榘言械囊粚觿澐譃榱巳龑?#xff0c;這樣大大減少了系統(tǒng)的性能,使之前的很多可以直接訪問數(shù)據(jù)庫的。如今卻要通過中間層來完畢。
總結(jié):
? ?對于三層架構(gòu)的使用,盡管可以提高代碼的適應(yīng)性,可是對于邏輯簡單的程序來說還是避免使用為好,否則僅僅會(huì)得到適得其反的效果.合理的使用三層架構(gòu),才干讓其各司其職,各盡所能。
轉(zhuǎn)載于:https://www.cnblogs.com/bhlsheji/p/5363322.html
總結(jié)
- 上一篇: bzoj 3223: Tyvj 1729
- 下一篇: JQuery Deferred 对象