三層,你真的理解了嗎?
這篇部落格,在草稿箱存了很久,直至今日才準備發表。為什麼呢?剛開始寫這個部落格的時候是三層登入剛剛實現。程式碼是借鑑的網上大神的,只是實現了簡單的登入功能。知道它有三個層,每層是幹嗎的,理解也僅僅侷限於官方的解釋。也就是下面的這些東東:
UI(view):顯示層,只負責顯示和採集使用者操作,不包含任何的業務相關的邏輯處理。
BLL(Business Logic Layer):業務邏輯層,通過獲取UI傳來的操作指令,決定執行業務邏輯,在需要訪問資料來源的時候直接交給DAL處理。處理完成後,返回必要資料給UI.
DAL(Data Access Layer):資料訪問層,只是提供基本的資料訪問,不包含任何業務相關的邏輯處理。
看見了之後,頭都大了,說的不錯,但是反應到程式碼裡面到底是怎麼個樣子嗎?不懂啊~~~所以這篇文章,直到今天,才得以重見天日。
現在對它的理解稍稍好了那麼一點,下面讓大家看看他們之間的對話,看看哪個人說錯了,拉出去槍斃!
UI層說:要想登入就必須要驗證使用者,要麼成功,要麼失敗!
UI層程式碼:
<span style="font-size:18px;">Public Class frmLogin
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
Dim LUser As New Entity.User '例項化LUser為實體層使用者
Dim BCheck As New BLL.BllLogin '定義BCheck為B層的登陸方法
LUser.ID = txtUserID.Text
LUser.Password = txtPwd.Text
If BCheck.Check(LUser) = True Then
MsgBox("登入成功!")
Else
MsgBox("登入失敗!")
End If
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
End
End Sub
End Class
</span>
BLL層說:好的,我告訴你驗證使用者的方法,就是比較介面輸入的使用者名稱和密碼跟資料庫中提取出來的資料是否一致。
B層程式碼:
<span style="font-size:18px;">Public Class BllLogin
Function Check(ByVal User As Entity.User) As Boolean
Dim DaUser As New DAL.DalUserInfo '定義DaUser為D層的使用者資訊
Dim BlUser As New Entity.User
BlUser.ID = User.ID 'B層引用的D層的User.ID
BlUser = DaUser.Check(BlUser) 'bll層對Dal層的判斷方法
'判斷密碼是否跟實體層的密碼是否一致
If BlUser.Password = User.Password Then
Return True
Else
Return False
End If
End Function
End Class</span>
DAL層說:你們跟我說,想要什麼資料,我拿鑰匙去資料庫裡面取。
DAL層程式碼:
<span style="font-size:18px;">Imports System.Data.SqlClient '名稱空間
Public Class DalUserInfo
'聯接資料庫,ConnStr用來初始化Connection物件 initial Catalog是要聯接的資料庫的名字
Dim ConnStr As String = "Data Source=192.168.24.175;Initial Catalog=Login ;User ID=sa;Pwd=123456"
Dim conn As SqlConnection = New SqlConnection(ConnStr) '建立聯接物件
Function Check(ByVal User As Entity.User) As Entity.User
'資料庫查詢語句
Dim sql As String = "select * from UserInfo where ID='" & User.ID & "'"
Dim cmd As SqlCommand = New SqlCommand(Sql, conn)
Dim read As SqlDataReader
Try '先執行try裡面的語句,如果出現錯誤,就馬上跳入Catch中
conn.Open() '開啟聯接
read = cmd.ExecuteReader '返回型別為SqlDataReader,此方法用於查詢操作
read.Read()
User.ID = read.Item("ID")
User.Password = read.Item("Password")
Return User
Catch ex As Exception
User.Password = ""
Return User
End Try
End Function
End Class</span>
Entity層說:UI層、DAL層、BLL層,沒有我這傳聲筒,你們去哪找個具體的物件來練手~
Entity層程式碼:
<span style="font-size:18px;">
Public Class User
Private userID As String '定義一個私有變數userID為字串型別
Private userPwd As String '定義一個私有變數userPwd為字串型別
Public Property ID() As String
Get’讀
Return userID
End Get
Set(value As String)’寫
userID = value
End Set
End Property
Public Property Password() As String
Get
Return userPwd
End Get
Set(value As String)
userPwd = value
End Set
End Property
End Class
</span>
總之我們的UI層主外,就像老闆,負責攬活和交活。BLL層就是比較專業一些了,就像設計師,UI層從外面攬的活,他來做邏輯上的處理,進行出謀劃策,提供建造圖紙。DAL層就比較辛苦了,就像工人,聽從組織安排,整天跟磚頭水泥打交道,幹活就行,啥操心的活都讓BLL層處理去吧。
這次的理解到不了爐火純青的地步,但是似乎比剛開始的生搬硬套好了那麼一些。現在發現自己還是一個膽小鬼,當初只要踏踏實實的把註釋寫好,把各個層的程式碼,程式碼和功能放到一起進行對比理解,搞懂程式碼和功能之間的對應關係,絕對是so easy!當初大部分時間還是花在不願意動腦,糾結猶豫上面了。還有做事之前一定要考慮,執行一個番茄的目的,目標不明確,就不要怪自己在別的地方留戀太久了。
相關文章
- ava String 物件,你真的瞭解了嗎?物件
- 【極客思考】設計模式:你確定你真的理解了單例模式嗎?設計模式單例
- HTTPS 你瞭解了嗎?HTTP
- Object物件你真理解了嗎?Object物件
- 你真的理解了java單例模式嗎?講別人都忽略的細節!Java單例模式
- buffer busy waits你誤解了嗎?AI
- 你真的理解this嗎
- 谷歌官方元件Navigation你瞭解了嗎?谷歌元件Navigation
- Spring 系列(三):你真的懂@RequestMapping嗎?SpringAPP
- 你真的理解setState嗎?
- 你真的理解==和===嗎
- WebView你真的熟悉嗎?WebView
- 你真的知道JS嗎JS
- 你知道什麼是三層架構嗎?架構
- Javascript建立陣列的方式你瞭解了嗎JavaScript陣列
- 你真的會用 Java 中的三目運算子嗎?Java
- 「資料庫、資料庫連線池、資料來源」這些概念你真的理解了嗎?資料庫
- ViewStub你真的瞭解嗎View
- 你真的理解 getLocationInWindow 了嗎?
- 你真的知道跨域嗎跨域
- 你真的瞭解mongoose嗎?Go
- TCP|你真的懂 HTTP 嗎?TCPHTTP
- [譯]你真的理解grok嗎
- 你真的懂函式嗎?函式
- 你真的會用 Babel 嗎?Babel
- 你真的瞭解 WebSocket 嗎?Web
- 你真的理解 new 了嗎?
- 你真的懂C++嗎?C++
- 作為產品經理,你真的有資料 sense 嗎?
- 運營經理,你真的知道模型裡的R平方嗎?模型
- 你誤解了Windows的檔案字尾名嗎?Windows
- 你真的理解索引嗎?從資料結構層面解析mysql索引原理索引資料結構MySql
- 專案經理的時間管理秘籍,你真的瞭解嗎?
- JavaScript 你真的瞭解this指向嗎JavaScript
- 你真的會vue-router嗎?Vue
- 你真的瞭解前端路由嗎?前端路由
- 你真的熟練使用webpack嗎?Web
- 你真的理解 flex 佈局嗎?Flex