學習了三層,有一個登錄窗體的小練習,是我們第一次接觸三層的初戰。現在只是簡單的了解了一些,需要學習的還有很多,下面淺談自己的理解。
我們說的三層就是分層了顯示層、業務邏輯層和數據訪問層,其中顯示層是直接和客戶打交道的,是用戶的顯示界面;而業務邏輯層是處理業務的,是中間的橋梁,聯系著顯示層和數據訪問層,把用戶的請求進行分析處理,在給數據源寫入;那麼數據訪問層是做什麼的呢?主要操縱數據庫,對數據庫中的數據進行增刪改查的處理。這樣各個層次就有了自己特定的功能,達到了高內聚低耦合的效果。
這是一個簡單的登錄窗體的實現過程。
<span style="font-family:KaiTi_GB2312;font-size:18px;"> private void btnOK_Click(object sender, EventArgs e)//登錄按鈕 string UserName=txtUserName.Text.Trim ();//用戶名賦值給UserName string Password=txtPassWord .Text ; //密碼賦值給Password Login<span style="color:#FF0000;">.<strong>BLL.LoginManager</strong></span> mgr = new Login.BLL.LoginManager();//實例化出BLL層中的LoginManager,兩個引用的實現 Login.<span style="color:#333333;"><strong>Model.UserInfo</strong></span> user=mgr.UserLogin(UserName, Password);//調用BLL層中的方法UserLogin MessageBox.Show("登錄用戶:" + user.UserName);</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;"> public class <span style="color:#FF0000;"><strong>LoginManager</strong></span>//調用BLL層中的LoginManager { public Login.Model.UserInfo <span style="color:#FF0000;"><strong>UserLogin</strong></span>(string UserName,string Password) { Login.<span style="color:#FF0000;"><strong>DAL.UserDAO</strong></span> uDao = new Login.DAL.UserDAO();//實例化DAL層中的UserADO Login.<strong>Model.UserInfo</strong> user=uDao.SelectUser(UserName, Password);//在數據層DAL,調用方法SelectUser判斷用戶名和密碼 if (user!=null) { Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();//實例出DAL層的ScoreDAO,對登錄成功的用戶進行加分操作 sDao.UpdateScore(UserName, 10); return user; } else { throw new Exception("登錄失敗"); } } </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">public static string conString = @"Server=LFH;Database=LoginSanCeng;User ID=sa;Password=1";//鏈接數據庫 public Login.Model.UserInfo <span style="color:#FF0000;"><strong>SelectUser</strong></span>(string UserName,string Password) { using (SqlConnection conn = new SqlConnection(DBUtil.conString)) //通過參數DBUtil.conString打開連接數據 { SqlCommand cmd = conn.CreateCommand();//創建cmd執行sql語句 cmd.CommandText = @"SELECT ID,UserName,Password,Emall FROM Users WHERE UserName=@UserName AND Password=@Password";//sql語句 cmd.CommandType = CommandType.Text; cmd.Parameters.Add(new SqlParameter("@UserName", UserName));//Parameters添加參數 cmd.Parameters.Add(new SqlParameter("@Password", Password)); conn.Open();//打開數據源 SqlDataReader reader = cmd.ExecuteReader();//讀取數據並且得到結果 Login.Model.UserInfo user = null; while (reader.Read ())//讀取數據 { if (user==null) { user = new Login.Model.UserInfo(); } user.ID = reader.GetInt32(0); user.UserName = reader.GetString(1); user.Password = reader.GetString(2); if (!reader.IsDBNull(3)) { user.Emall = reader.GetString(3); } } return user; } } } public void <span style="color:#FF0000;"><strong>UpdateScore</strong></span>(string UserName,int value)//更新分數操作 { using (SqlConnection conn=new SqlConnection(DBUtil.conString ))//打開數據庫鏈接 { SqlCommand cmd = conn.CreateCommand ();//創建執行sql語句 cmd.CommandText = @"INSERT INTO SCORE(UserName,Score) Values(@UserName,@Score)";//sql語句 cmd.Parameters.Add(new SqlParameter("@UserName", UserName));添加到數據庫中 cmd.Parameters.Add(new SqlParameter("@Score", value)); //cmd.Parameters.Add(new SqlParameter("@ID", value)); conn.Open();打開數據庫 cmd.ExecuteNonQuery();//執行sql語句,返回整數變量 } }</span>
其中三層登錄就是UI層引用BLL層的邏輯進行業務分析,BLL層引用DAL層進行數據判斷,如果數據正確用戶可以登錄成功通過BLL層返回給UI層,UI顯示給客戶。Model層是封裝數據的,提供給其他三個層次,它是獨立的,不引用任何層的邏輯,甚至不知道其他層次的存在,只是提供了服務,是最無私的。UI引用了BLL層和Model層,BLL層引用DAL和Model層,從而實現了UI層和DAL的間接聯系,而DAL層引用了Model層,主要是對數據庫的操作。
三層就是把一個系統分成部分,每個部分負責一定的職責,各盡其職,各司其守,不可越俎代!