【三层】三层
三层介绍
三层架构将数据层、应用层和业务层分离,业务层通过应用层访问数据库,保护数据安全,利于负载平衡,提高运行效率,方便构建不同网络环境下的分布式应用。
表现层(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";
}
}