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