工慾善其事必先利其器! 而其器又是否真的鋒利了呢?
想要成爲一個出色的程序員,於是乎我學習、練習,以爲自己什麼都會了,結果卻經不起一個小小的考驗!
上午米老師所講的內容,所說的那個題,時時刻刻在我腦中縈繞着,自以爲把VB學的也挺好,可簡單的一道小題目卻把我們這些人問住了,爲什麼答不上來? 學的VB學哪去了? 我們自己知道嗎?
自命不凡的以爲擁有了世界,可熟不知連小草都不屬於你,我想對於我們眼高手低應該能描述的準確一點吧! 強不知以爲知,怎能善其事 ?
由此聯想到自己,還真是活靈活現的寫照! 因爲我是學過VB的,這麼簡單的東西我怎麼能承認自己不會呢! 於是寫啊寫啊,寫到最後那些代碼自己都說不通了。學習VB是一回事,那麼我目前學習三層不也是一樣嗎? 我覺着我學得挺好啊,該看的看了,該學的學了,什麼理論啊也會啊,但讓我描述描述三層怎麼個思維邏輯時,說着說着就說不下去了,其實就是沒有學會,不懂裝懂。結果什麼也沒做好!就拿三層登陸的小例子來說,我做了,看代碼 明白了,,可怎麼就自己描述不出來呢?
下午靜下心來,踏實的去學習這段知識,這才恍然大悟,之前我也曾在博客中寫了關於三層的創建、登陸例子的知識,到今天纔算是真正理解了。
U層
直接面向用戶,拿登陸的小例子來說,用戶看到的是下面的界面,用戶只需要輸入用戶名和密碼,點擊確定即可,而U層所要做的工作就是將用戶輸入的用戶名和密碼值傳給實體層的參數,實體層則把用戶輸入的消息告訴B層,這些就是U層需要乾的事
實體類
Public Class userInfo
Public username As String
Public password As String
Public Property User_Name() As String
'實體層,存放我們需要的參數,例如登陸時需要的
'用戶名和密碼
Get
Return username
End Get
Set(value As String)
username = value
End Set
End Property
Public Property pass_word() As String
Get
Return password
End Get
Set(value As String)
password = value
End Set
End Property
End Class
U層Public Class Form1
Private Sub btLogin_Click(sender As Object, e As EventArgs) Handles btLogin.Click
Dim user2 As Login.Model.userInfo
user2 = New Login.Model.userInfo
'實例化實體層的參數,將登陸輸入進來的數傳給實體
user2.User_Name = txtUserName.Text.ToString()
user2.pass_word = txtPassWord.Text.ToString()
Dim bll As Login.BLL.LoginLogic = New LoginLogic
If bll.User_logic(user2) Then
MsgBox("登陸成功")
Else
MsgBox("登陸失敗")
End If
End Sub
End Class
BLL 層 業務邏輯層
B層則是存放一些算法的邏輯什麼的,當U層將信息傳給B層後,B層將這個信息通知D層,然後根據D層返回來的值做邏輯判斷。
Public Class LoginLogic
Public Function User_logic(ByVal user1 As Login.Model.userInfo) As Boolean
'聲明一個對象來實例化D層中的類,進而利用其中的方法
Dim dll As Login.DAL.LoginSelect = New Login.DAL.LoginSelect
Return dll.user_chaxun(user1)
End Function
End Class
DAL 數據訪問層
D層在接到B層傳來的信息後,也會進行相應的判斷,而對於這個登陸的例子呢,需要打開數據庫判斷用戶輸入的數據是否存在,然後返回給B層相應的信息。接着B層會將邏輯判斷後的信息返回給U層,進而U層也就將最終結果返回給用戶了,這也就是我們能看到的,登陸成功或者是登陸失敗。
Public Class LoginSelect
'數據庫連接字符串
Dim str As String = "Data Source =192.168.24.74;Initial Catalog=chargeStudent;user ID =sa;password=123456"
Dim conn As SqlClient.SqlConnection
Public Sub New() '設計一個函數來打開數據庫
conn = New SqlClient.SqlConnection
conn.ConnectionString = str
conn.Open()
End Sub
'接下來就要執行相應的命令和查詢
Public Function user_chaxun(ByVal user As Login.Model.userInfo) As Boolean
Dim sqlStr As String
'查詢命令字符串
sqlStr = "select * from user_Info where user_ID='" & user.User_Name & "' and user_PWD='" & user.pass_word & "'"
Dim strCmd As SqlClient.SqlCommand
strCmd = New SqlClient.SqlCommand(sqlStr, conn)
'strCmd.CommandText = sqlStr
'strCmd.Connection = conn
'執行命令並查詢數據,將數據返回到datareader 中
Dim dr As SqlClient.SqlDataReader = strCmd.ExecuteReader
If dr.Read() Then
Return True
Else
Return False
End If
End Function
End Class
到此爲止呢,整個邏輯也就完成了,也就看到了登陸是否成功,另外還有貫穿三層之間的實體類 完成了整個過程
在配上 登陸的時序圖會更好理解了吧
其實當自己親自把邏輯理清楚了,動手去實踐了,把不懂的疑問都弄明白了,那麼事情也就順理了,小程序給了自己一個教訓。時刻謹記着了,否則怎麼善其事呢!