前邊學習了三層,也寫過了三層的理論知識。後續用機房收費系統的登陸例項,實踐了三層的理論知識。疏於思考,所以即使敲了兩、三遍的登陸窗體也沒有用。也是我沒有信心將敲的例項貼出來的原因。
所以,我總結了:學習不是應付,做做表面功夫。用心+思考。
環境: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
getreturn name
end get
set(value as string)
name = value
end set
end property
'登陸使用者密碼
public property user_pwd as string
getreturn password
end get
set(value as string)
password = value
end set
end property
'登陸使用者id
public property user_id() as string
getreturn userid
end get
set(value as string)
userid = value
end set
end property
'登陸使用者級別
public property user_level() as string
getreturn level
end get
set(value as string)
level = value
end set
end property
'登陸使用者積分
public property user_account() as string
getreturn account
end get
set(value as string)
account = value
end set
end property
end class
dal層:主要是訪問資料庫,返回查詢結果。
imports system.data.sqlclient
imports entity
public 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 function
end class
bll層:主要做邏輯判斷,例項化dal層的類,取得查詢結果。進行邏輯判斷。
imports entity
imports logindal
public 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 function
end class
ui層:收集使用者的資訊,例項化bll層的類,取得判斷結果。返回給使用者。
imports entity
imports loginbll
public class form1
private sub btncancle_click(sender as object, e as eventargs) handles btncancle.click
endend 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 sub
end class
至此登陸窗體完成。
小結:1.登陸例項可謂,麻雀雖小,五臟俱全。容易理清三層之間的關係及操作。
2.資料庫查詢部分內容可以進行封裝,避免重複操作。
3.邏輯層直接將查詢結果返回,沒有做過多處理,例如對資料庫進行操作。
4.方法、函式都相對簡單,只是返回布林值。
5.命名方式不是很合理,待科學化。
三層登陸例項
在理論篇我們已經知道了,實體類作為三層之間的傳遞和處理物件 封裝引數 在系統中三層建立對實體類的引用,上層建立對下層的引用 ui bll dal。1 系統說明 功能 以機房收費系統的資料庫 user info 表為基礎實現基本的系統登陸,如果登陸成功則彈出提示框顯示登入成功,否則則顯示 使用者名稱和...
C 三層登入《機房重構》
光總結了c 三層登入出現的問題,還沒有真正總結過三層登入例項,近來敲機房的七層登入,可謂是問題重重,當初自以為三層理解的很透徹了,現在看來還差的很多,我需要用總結來沉澱一下自己,讓自己的心不那麼浮躁。簡單來說,三層有別於之前有vb敲的小例子的是,三層非常好的解除了各個層之間的耦合,為以後的維護提供了...
三層架構 實踐篇
層 呼叫ui層 model bll bll層 model dll dll層 model 最後就是 實現部分 model層namespace login.model public string username public string password public string email ui...