前言
三层敲完之后,有很多不理解的,代码直接看的视频并不知道之间的值是怎么传的,后来逐句调试了几遍,把每句话的代码基本都写上了,逐渐理解了。
三层是什么
三层架构把整个软件分为了三个层次:表现层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Date access layer)
UI层称为表现层,像用户展示特定的业务数据,收集用户的信息(如用户名密码),最接近用户。
BLL称为业务逻辑层,对UI提供方法,调用DAL层提供的方法,判断执行逻辑
DAL层称为数据访问层,仅包含对数据库进增删改查
如图:
为什么分三层
方便团队分工,一个程序员单独完成一个软件不是不可以的,但是大型软件需要软对的配合,问题是每个程序员编写风格不一样,就会造成后期调试和维护比较困难,软件分层后,合理分工,这样的问题迎刃而解
代码规范,在开发软件时对每个层的代码进行规范,固定开发语言风格
忽略数据库差异,当软件系统要换数据库时,只要将数据访问层的代码修改就好了
实现“低耦合,高内聚”。把问题划分开来各个解决易于控制,延伸,分配资源。
分层后代码逻辑也清晰了,优点很多呀,相信每个人都有自己不同的体会和感受
生活中的理解
用户:相当于食客,食客通过服务员
UI层:相当服务员,负责食客的点餐上菜,就如同UI层的登录指令
业务逻辑层:相当于主厨,主厨从服务员那获得通知,像助手要原材料(就像找数据库要数据),然后将原材料绘制成成品交给服务员
数据访问层:相当于助手,助手从主厨获得通知,在把材料提交给主厨
这样每个层有问题就容易改了。
服务员态度不好~~~~~~换服务员
菜品味道不好~~~~~~~~换厨师
菜品原材料不够新鲜~~~换助手
通过实例讲解三层架构
最简单的登录来说,登录成功每个学生获得10积分。
UI:用户交互的功能,采集信息的反馈结果
//实例化B层服务类
Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
//定义两个变量来接收
string Password = txtPassword.Text;
string userName = txtUserName.Text.Trim();
int ID = 0;
string msg = "";
//把值传入B层
Login.Model.UserInfo user = new Login.Model.UserInfo();
user = mgr.UserLogin(ID, userName, Password,out msg);
MessageBox.Show(msg);
B层:
//实例化D层
Login.DAL.UserDAO uDao = new Login.DAL.UserDAO();
//进入D层,调用D层的SelectuUser方法,之后给user
Login.Model.UserInfo user= uDao.SelectUser(userName, Password);
//判断user有无值
if (user!=null)
{ //有值实例化D层
Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();
//给D层UpateScore传值
sDao.UpateScore(user.ID,userName, 10);
msg = "登录成功";
}
else
{
msg = "登录失败,没有这个用户或者密码错误";
}
return user;
}
D层(UserDAO类):
using (SqlConnection conn = new SqlConnection(DbUtil.connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Password", Password));
//查询数据库
cmd.CommandText = @"SELECT ID,UserName,Password,Email
FROM USERS WHERE UserName=@UserName AND Password=@Password ";
cmd.CommandType = CommandType.Text;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
Login.Model.UserInfo user = new Login.Model.UserInfo();
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);//not suggestion
if (!reader.IsDBNull(3))
{
user.Email = reader.GetString(3);
}
}
return user;
}
D层(ScoreDAO类):
using (SqlConnection conn = new SqlConnection(DbUtil.connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.Parameters.Add(new SqlParameter("@UserName", userName));
cmd.Parameters.Add(new SqlParameter("@Score", value));
cmd.Parameters.Add(new SqlParameter(@"ID", ID));
cmd.CommandText = @"insert INTO SCORES(ID,UserName,Score)Values(@ID,@UserName,@Score) ";
conn.Open();
cmd.ExecuteNonQuery();
}
总结
在学编程有三层,人生的境界也有三层,看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。我们学习的过程,也不过如此。如果满足于看山是山,看水是水的阶段,那么永远就只能是知识的容器;如果停留在看山不是山,看水不是水的阶段,有人能对知识联系联系起来 ,有的会迷茫感觉困难。要想真正运用知识,就必须回归到看山还是山,看水还是水,看山不是山,看水不是水的源头。当达到最高境界时啥七层,编程呀,都不是问题了,看多学多理解多就会了。
————————————————
版权声明:本文为CSDN博主「Ailce-王梦瑶」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a15076159739/article/details/82811203