學習了三層,有一個登錄窗體的小練習,是我們第一次接觸三層的初戰。現在只是簡單的了解了一些,需要學習的還有很多,下面淺談自己的理解。
我們說的三層就是分層了顯示層、業務邏輯層和數據訪問層,其中顯示層是直接和客戶打交道的,是用戶的顯示界面;而業務邏輯層是處理業務的,是中間的橋梁,聯系著顯示層和數據訪問層,把用戶的請求進行分析處理,在給數據源寫入;那麼數據訪問層是做什麼的呢?主要操縱數據庫,對數據庫中的數據進行增刪改查的處理。這樣各個層次就有了自己特定的功能,達到了高內聚低耦合的效果。
這是一個簡單的登錄窗體的實現過程。

<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層,主要是對數據庫的操作。
三層就是把一個系統分成部分,每個部分負責一定的職責,各盡其職,各司其守,不可越俎代!