【三层架构】
程序员文章站
2024-03-06 08:36:07
...
前言
最近开始了三层的学习,对三层一点都不了解的我,学的是满头的雾水,值在三个层中间传来传去,然后对实例进行了调试,功夫不负有心人,下面我来分析一下三层。
哪三层
- 表现层(UI):
展现给用户的界面,即用户在使用一个系统的时候他的所见所得。(VS里的Form窗体就是UI层) - 业务逻辑层(BLL):
对数据层的操作和业务的处理。接收用户的指令或者数据输入,提交给数据访问层做处理,同时负责将业务逻辑层的处理结果显示给用户。 - 数据访问层(DAL):
该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等
三层之间的传递方向
源于生活
服务员只管接待客人相当于UI层,厨师只管炒菜做饭相当于BLL层,采购员只管按客人的需求采购食物相当于DAL层。
各层的职责
- UI只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理。
- BLL负责处理业务逻辑,通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI。
- DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理
实例
UI:
//定义两个变量来接收
string userName = txtUserName.Text.Trim();
string password = txtPassword.Text;
string ID;
//实例化B层
LoginManager agr = new LoginManager();
//把值传到B层
UserInfo user = agr.UserLogin(userName, password,out ID);
MessageBox.Show("登陆用户:" + user.UserName);
B层:
public UserInfo UserLogin(string userName, string password, out string ID)
{
//实例化D层
UserDAO uDao = new UserDAO();
//调用D层里面的SelectUser方法,之后把给到user
UserInfo user = uDao.SelectUser(userName, password);
ID = null;
//判断user是否有值
if (user != null)
{
//有值
ID = Convert.ToString(user.ID);
//实例D层
ScoreDAO sDao = new ScoreDAO();
//传值
sDao.UpdateScore(ID, userName, 10);
return user;
}
else
{
throw new Exception("登陆失败!");
}
}
D层(UserDAO类):
public Login.Model .UserInfo SelectUser(string userName, string password)
{
using (SqlConnection conn = new SqlConnection(DuUtil.ConnString ))
{
SqlCommand cmd = conn.CreateCommand();
//查询数据库
cmd.CommandText = @"select ID,UserName,Password,Email from user_Info where aaa@qq.com and aaa@qq.com";
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Password", password));
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
Model.UserInfo user = null;
while (reader.Read())
{
if (user==null)
{
user = new 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);
}
}
//传到B层
return user;
}
}
D层(ScoreDAO类):
public Model .UserInfo SelectUser(string userName, string password)
{
using (SqlConnection conn = new SqlConnection(DuUtil.ConnString ))
{
SqlCommand cmd = conn.CreateCommand();
//查询数据库
cmd.CommandText = @"select ID,UserName,Password,Email from user_Info where aaa@qq.com and aaa@qq.com";
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Password", password));
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
Model.UserInfo user = null;
while (reader.Read())
{
if (user==null)
{
user = new 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);
}
}
//传到B层
return user;
}
}
总结
区分层次的目的就是为了实现“高内聚低耦合”,在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。仅仅三层就蕴含着大道理,也是为七层做准备,为七层打基础的过程。