董可 廊坊師範學院資訊科技提高班十四期
阿新 • • 發佈:2018-12-13
三層介紹
三層架構將資料層、應用層和業務層分離,業務層通過應用層訪問資料庫,保護資料安全,利於負載平衡,提高執行效率,方便構建不同網路環境下的分散式應用。
表現層(UI)
展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。依據應用規模的不同,所承受的負荷會有較大的差異,另外客戶端的數目,應用的複雜程度都會對其造成一定的影響。
namespace LoginUI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void btnLogin_Click(object sender, EventArgs e) { 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 ); MessageBox.Show("登陸使用者:" + user.UserName); } } }
業務邏輯層(BLL)
對資料層的操作和業務的處理。接收使用者的指令或者資料輸入,提交給應用層做處理,同時負責將業務邏輯層的處理結果顯示給使用者。相比傳統的應用方式,業務層對硬體的資源要求較低。
namespace Login.BLL { public class LoginManager { public Login.Model.UserInfo UserLogin(string userName, string password) { Login.DAL.UserDAO uDao = new Login.DAL.UserDAO(); Login.Model.UserInfo user=uDao.SelectUser(userName,password); if (user != null)//如果登陸成功,則新增積分 { Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO(); sDao.UpdateScore(userName , 10); return user; } else { throw new Exception("登入失敗!"); } } } }
資料層(DAL)
直接操縱資料庫,主要是增刪改查的功能。儲存資料的資料庫伺服器和處理資料和快取資料的元件。元件將大量使用的資料放入系統的快取庫,以提高資料訪問和處理的效率。 業務邏輯層是整個三層的核心內容,分層的原理就是在客戶端和資料庫之間加一個“中間層”,對資料的訪問起到一個承上啟下的作用。兩者的訪問都是通過中間層進行的,不能直接聯絡。 UserDAO
namespace Login.DAL
{
public class UserDAO
{
public Login.Model.UserInfo SelectUser(string userName, string password)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT ID, UserName, Password, Email From USERS
WHERE [email protected] AND [email protected] ";
cmd.CommandType = CommandType.Text;
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;
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.Email = reader.GetString(3);
}
}
return user;
}
}
}
}
ScoreDAO
namespace Login.DAL
{
public class ScoreDAO
{
public void UpdateScore(string userName, int value)
{
using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = @"INSERT INTO SCORES(UserName, Score) Values(@UserName, @Score)";
cmd.Parameters.Add(new SqlParameter("@UserName",userName ));
cmd.Parameters.Add(new SqlParameter("@Score",value));
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
}
DbUtil
namespace Login.DAL
{
public class DbUtil
{
public static string ConnString = @"Server = 冰瞳\SQLEXPRESS ; Database = Login ; User ID = sa; Password = 123456";
}
}