三层架构实战篇—系统登录实例
? ???上一篇博客,介紹了三層的一些基本理論,但是學(xué)習(xí)光有理論還是不行滴!馬克思不也說過了嗎?實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)!
? ? ? ? 所謂的三層分為物理上的三層和邏輯上的三層。物理上的三層包括:客戶端(PC)、應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器。邏輯上的三層,也就是我們要討論的,分為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層。實(shí)體層,嚴(yán)格的來說不屬于三層中的任一層,它是獨(dú)立于其他三個(gè)層次的,只能供其他層次進(jìn)行引用,但是不能引用其他的三個(gè)層次。
? ? ? ? 下面是數(shù)據(jù)在三層中的一個(gè)具體走向圖,這對(duì)于我們了解三層的一條線很有幫助。
?
??? ? ?
? ? ? ?三層應(yīng)用原則:
?
- DAL只提供基本的數(shù)據(jù)訪問,不包含任何的業(yè)務(wù)邏輯
- UI只負(fù)責(zé)顯示和采集用戶操作,不包含任何業(yè)務(wù)相關(guān)的邏輯處理
- BLL負(fù)責(zé)處理業(yè)務(wù)邏輯。通過獲取UI傳來的用戶指令,執(zhí)行業(yè)務(wù)邏輯,在需要訪問數(shù)據(jù)源的時(shí)候,直接交個(gè)DAL進(jìn)行處理。處理完成后,返回必要數(shù)據(jù)給UI。
?
?
? ? ?實(shí)現(xiàn)步驟:
?
? ? ? ?(1)前期準(zhǔn)備:
? ? ? ? ? ? ??1.根據(jù)上一層引用下一層以及實(shí)體層在各層的作用,繪制UML圖。
? ? ???2.根據(jù)UML圖顯示的關(guān)系,構(gòu)建三層框架。
?
? ? ? ?
3.建立數(shù)據(jù)庫,包含UserInfo表。
?
(2)代碼實(shí)現(xiàn)階段
1.用戶界面層(LoginUI):
? ? ? ?作用:
- 向用戶展現(xiàn)特定業(yè)務(wù)數(shù)據(jù)
- 采集用戶的輸入信息和操作
?
? ? ? ?原則:用戶至上,兼顧簡(jiǎn)潔
? ? ? ?添加類:frmLogin
?
?
namespace LoginUI {public partial class frmLogin : Form{public frmLogin(){InitializeComponent();}private void btnLogin_Click(object sender, EventArgs e){//UI層將用戶輸入數(shù)據(jù)傳遞給BLL層string userName = txtUserName.Text.Trim();string password = txtPassword.Text;Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();Login.Model .UserInfo user= mgr.UserLogin (userName, password);//UI層返回業(yè)務(wù)層傳遞的數(shù)據(jù)給用戶MessageBox.Show("登錄用戶:" + user.UserName);}?
?
2.業(yè)務(wù)邏輯層(LoginBLL):
? ? ? ?作用:
- 從DAL獲取數(shù)據(jù),提供UI顯示
- ?從UI獲取用戶和指令,執(zhí)行業(yè)務(wù)邏輯
- 從UI獲取用戶和指令,通過DAL寫入數(shù)據(jù)
?
? ? ? ?BLL的職責(zé)機(jī)制:
? ? ? ? ? ? ? ?UI→BLL→UI
? ? ? ? ? ? ? ?UI→BLL→DAL→BLL→UI? ?
? ? ? ?添加類:LoginManager? ??
??
?
namespace Login.BLL {public class LoginManager{public Login.Model .UserInfo UserLogin(string userName,string password){Login.DAL.UserDAO uDao = new Login.DAL.u (); //實(shí)例化DAL層Login.Model.UserInfo user = uDao.SelectUser(userName, password);//不需要訪問數(shù)據(jù)源,直接執(zhí)行業(yè)務(wù)邏輯if (user != null){return user;}else{throw new Exception("登錄失敗");}}} }?
?
3.數(shù)據(jù)訪問層(LoginDAL):
? ? ? ?作用:SELECT、INSERT/UPDATE、DELETE
? ? ? ?添加類:UserDAO? ??? ? ?
?
namespace Login.DAL {public class UserDAO{public Login.Model.UserInfo SelectUser(string userName, string Password){//建立數(shù)據(jù)庫連接string ConnString = @"Server =192.168.24.45;DataBase =Login; User ID =sa ;Password =123";using (SqlConnection conn = new SqlConnection(ConnString)){//執(zhí)行SQL語句進(jìn)行查詢SqlCommand cmd = conn.CreateCommand();cmd.CommandText = @"SELECT ID,UserName,Password,Email FROM UserInfo WHERE UserName =@UserName AND Password =@Password";//輸出查詢結(jié)果cmd.CommandType = CommandType.Text;//添加兩個(gè)參數(shù)cmd.Parameters.Add(new SqlParameter(@"UserName", userName));cmd.Parameters.Add(new SqlParameter(@"Password", Password));conn.Open();SqlDataReader reader = cmd.ExecuteReader();Login.Model.UserInfo user = null;//讀取具體的數(shù)據(jù)while (reader.Read()){if (user == null){user = new Login.Model.UserInfo();}//讀取查詢到的數(shù)據(jù)user.ID = reader.GetInt32(0);user.UserName = reader.GetString(1);user.Password = reader.GetString(2);if (!reader.IsDBNull(3)){user.Email = reader.GetString(3);}}return user; }} }}?
?
4.實(shí)體(LoginModel):
? ? ? ?作用:封裝數(shù)據(jù),使數(shù)據(jù)在三層中傳輸 ,更傾向于業(yè)務(wù)邏輯層
? ? ? ?添加類:UserInfo
總結(jié)
以上是生活随笔為你收集整理的三层架构实战篇—系统登录实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Maven搭建Struts2+Spr
- 下一篇: 机房收费系统重构之存储过程的使用