前邊學習了三層,也寫過了三層的理論知識。後續用機房收費系統的登陸執行個體,實踐了三層的理論知識。疏于思考,所以即使敲了兩、三遍的登陸表單也沒有用。也是我沒有信心將敲的執行個體貼出來的原因。
所以,我總結了:學習不是應付,做做表面功夫。用心+思考。
環境:VB.NET架構下,以傳實體的方式完成。
UI層:即是介面部分。
實體:在UI層、BLL層、DAL層都需要使用的抽象。
'使用者類:主要涉及使用者的基本屬性(資訊)Public Class UserInfo Private name As String Private password As String Private Userid As String Private level As String Private account As String '以下為可讀寫屬性 '登陸使用者名稱字 Public Property user_name() As String Get Return name End Get Set(value As String) name = value End Set End Property
'登陸使用者密碼 Public Property user_pwd As String Get Return password End Get Set(value As String) password = value End Set End Property
'登陸使用者ID Public Property user_id() As String Get Return Userid End Get Set(value As String) Userid = value End Set End Property
'登陸使用者層級 Public Property user_level() As String Get Return level End Get Set(value As String) level = value End Set End Property
'登陸使用者積分 Public Property user_account() As String Get Return account End Get Set(value As String) account = value End Set End PropertyEnd Class
DAL層:主要是訪問資料庫,返回查詢結果。
Imports System.Data.SqlClientImports EntityPublic Class LoginDAL '資料庫連接語句 Dim sCon As String = "Data Source = (local);Initial Catial = Charge_sys;Persist Security Info = True;User ID = sa;Password = 123" Dim conn As SqlClient.SqlConnection '執行個體化連接字串,並開啟 Public Sub New() conn = New SqlClient.SqlConnection conn.ConnectionString = sCon conn.Open() End Sub '查詢資料庫中的使用者是否存在. Public Function Query_User(ByVal txtUser As Entity.UserInfo) As Boolean '定義資料庫查詢語句 Dim commandtext As String commandtext = "select * From User_Info where userID = '" & txtUser.user_id & "'And PWD = '" & txtUser.user_pwd & "'" Dim sqlcmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(commandtext, conn) '定義一個reader來讀資料,查詢使用者是否存在 Dim myReader As SqlDataReader myReader = sqlcmd.ExecuteReader() '如果查詢記錄不為空白,則返回真;記錄為空白,返回假。 If myReader.Read() Then Return True Else Return False End If '關閉串連 conn.Close() End FunctionEnd Class
BLL層:主要做邏輯判斷,執行個體化DAL層的類,取得查詢結果。進行邏輯判斷。
Imports EntityImports LoginDALPublic Class ManagerUser '定義一個D層的對象 Dim db As New LoginDAL.LoginDAL '此函數的作用是返回D層的執行的結果 Public Function query_user(ByVal model As Entity.UserInfo) As Boolean Return db.Query_User(model) End FunctionEnd Class
UI層:收集使用者的資訊,執行個體化BLL層的類,取得判斷結果。返回給使用者。
Imports EntityImports LoginBLLPublic Class Form1 Private Sub btnCancle_Click(sender As Object, e As EventArgs) Handles btnCancle.Click End End Sub Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click '定義一個實體類對象,將文字框中的內容賦給實體類對象 Dim CurrentUser As New UserInfo CurrentUser.user_id = txtUserName.Text.ToString() CurrentUser.user_pwd = txtUserPWD.Text.ToString() '定義一個邏輯層對象,根據商務邏輯層返回的結果,通知使用者資訊 Dim UserBLL As LoginBLL.ManagerUser = New LoginBLL.ManagerUser If UserBLL.query_user(CurrentUser) Then MsgBox(True) Else MsgBox(False) End If End SubEnd Class
至此登陸表單完成。
小結:
1.登陸執行個體可謂,麻雀雖小,五髒俱全。容易理清三層之間的關係及操作。
2.資料庫查詢部分內容可以進行封裝,避免重複操作。
3.邏輯層直接將查詢結果返回,沒有做過多處理,例如對資料庫進行操作。
4.方法、函數都相對簡單,只是返回布爾值。
5.命名方式不是很合理,待科學化。