三层学习------实践篇
? ?實踐是檢驗真理的唯一標準。以下我們使用三層架構實踐一個簡單的“登錄”業務。學以致用,來親身感受一下三層架構的呼吸。
? ? 以上是啟動界面,屬于U層,它是Winform形式的。還有web方式的。用戶在此輸入username與password后,系統驗證password是否正確。
注意,為了簡單易行,要求輸入的username在數據庫中的User表中存在,否則就會報錯。下面是總體的代碼結構。
接下來看一看詳細每一層中的代碼:
實體層:
<span style="font-family:SimSun;font-size:18px;"> public class User{private string userName = string.Empty;//string.Empty就相當于""。一般用于字符串的初始化private string pwd = string.Empty;public string UserName { get; set; }public string Pwd { get; set; }}</span>UI: <span style="font-family:SimSun;font-size:18px;"> private void btnOK_Click(object sender, EventArgs e)//點擊“確定”button,開始驗證用戶信息{//聲明一個bool類型的變量用來接收登錄狀態,登錄成功/失敗bool result = false;//檢查username與password是否為空if (txtUserName .Text ==""){MessageBox.Show ("username不能為空!");txtUserName.Focus();return;}if (txtPassword .Text ==""){MessageBox.Show("password不能為空!"); txtPassword.Focus(); return; } //聲明一個用戶對象,將用戶輸入的username和password賦于這個用戶對象 User euser = new User(); euser.UserName = txtUserName.Text.Trim(); euser.Pwd = txtPassword.Text; //訪問B層 LoginServer blogin = new LoginServer(); result = blogin.BLogin(euser);//B層驗證password后,返回一個布爾值。傳到此處 if (result ==true )//假設返回true。則登錄成功 { MessageBox.Show("登錄成功!"); } else //返回false,password輸入錯誤,登錄失敗 { MessageBox.Show("登錄失敗!"); } } private void btnCancel_Click(object sender, EventArgs e)//點擊“取消button”。關閉窗口 { this.Close(); }</span>
BLL: <span style="font-family:SimSun;font-size:18px;"> public class LoginServer //驗證用戶password是否正確{public bool BLogin(User User){UserDAL duser = new UserDAL();//訪問D層,連接數據庫User euser = new User();euser = duser.DLogin(User);//接下來的任務在D層中進行。從數據表中獲取該username的password//假設該用戶輸入的password與數據表中的一樣,則為真,登錄成功;反之為假。if (euser .Pwd ==User .Pwd )//euser是D層返回的實體類。攜帶著數據庫中存儲的用戶信息,User攜帶用戶輸入的用戶信息,將二者攜帶的password進行比較{return true;}else{return false;}//得到真假后。回到U層。回饋給用戶操作結果}}</span>DAL: <span style="font-family:SimSun;font-size:18px;"> public class UserDAL{//連接數據庫public static string conString = @"Server=CYL-PC; Database=Login; User ID=sa; Password=123456";SqlConnection cnn = new System.Data.SqlClient.SqlConnection(conString);//依據輸入的username獲取用戶passwordpublic User DLogin(User user){string sqlString="select * from Users where UserName='"+user .UserName +"'";User euser = new User();SqlCommand cmd = new SqlCommand(sqlString, cnn);//打開數據庫cnn.Open();SqlDataReader read;read = cmd.ExecuteReader();read.Read();//將User表中的用戶信息賦予給實體類。并將其返回B層euser.UserName = read[0].ToString();euser.Pwd = read[1].ToString();return euser;}}</span>數據庫Login中User表:? ? 代碼中的凝視寫得比較詳細,但在實際運行中。并非一條龍運行下去。U層引用B層,B層引用D層。這三層都引用Entity。
接下來將上述流程總體串一下。啟動系統后。首先顯示系統登錄界面,用戶輸入username和password后進行password驗證(若不輸入。點“確定”后系統檢測到空,又一次回到登錄界面)。
詳細的驗證過程是這種,三層都需實例化一個實體層中的User對象,當中U層的User攜帶用戶輸入的用戶信息(username和password);D層依據用戶輸入的username在數據庫中找到該用戶信息,讓D層的User攜帶,然后傳遞給B層的User。在B層運行詳細的驗證過程。U層User攜帶的password與B層User攜帶的password比較,若二者同樣,則顯示“登錄成功”向用戶反饋,反之提醒“登錄失敗”。
我的表達能力有限,預知清晰的運行內幕,逐語句調試(F11)。
? ? 在這三層中。DAL僅僅提供主要的數據訪問,UI僅僅負責顯示和採集用戶操作,他們都不包括不論什么與業務相關的邏輯處理。BLL負責處理業務邏輯,通過獲取UI傳來的操作指令,運行業務邏輯,在須要訪問數據源的時候交給DAL處理。
處理完畢后,返回必要的數據給UI。
實體層在他們之間上躥下跳。三層都不知道User中的詳細內容。這樣做的優點就是,實現了高內聚,低耦合。
各層分工協作,各司其職。有條不紊。增強了軟件系統的可擴展性、可復用性、可維護性。
轉載于:https://www.cnblogs.com/mfrbuaa/p/5251534.html
總結
以上是生活随笔為你收集整理的三层学习------实践篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习:time、unixti
- 下一篇: DOM对象分析