开篇碎碎念
之前画UML图的时候接触了一点三层,那时候对三层充其量就算是知道了,这段时间学习三层,可以说是认识了,我的感觉是三层富有挑战,自己也很兴奋,当然也感觉到自己要学的东西还有很多的。培养计划上说,对于三层的认识是一个持久的过程,我想这个过程一定是一个充满惊喜的旅途。
认识三层
三层是什么?
对于一个项目,我们把他的架构分为了三层:UI(界面层),BLL(业务逻辑层),DAL(数据访问层)。三层共同工作,且相互独立的完成这个项目要实现的功能。
你要问为什么用三层,什么时候用呢?
也不是所有的软件设计都需要用到三层的架构,如果编码简单,业务简单,数据存储简单的话,我们完全没有必要用到三层了。不过,如见软件的功能越来越强大了,项目的业务相对复杂,我们需要有单独存储数据的部分,同时对数据存储也有过高的要求,这时我们就要用到三层架构了。
为什么要用到三层呢?1.三层使得每一层之间的耦合度降低,一层的变化,不会或较小的影响到其他层的修改。2.三层之间的任意一层可以抽出来被另一个设计的层来替换,也就是这三层之间的组合式自由的。3.设计人员可以专注的设计某一层,效率提高了。
你知道三层是干什么的吗?
上面的三层我们说了半天了,这三层是干什么的呢?
1. UI:用户界面层,收集用户输入的信息,显示用户想要的信息。这一层没有业务逻辑,有点像拿来主义。
2. DAL:数据访问层,访问数据源,并对数据源进行增删该查的操作。这一层也没有业务逻辑,知识跟数据源打交道。
3. BLL:业务逻辑层,他是UI和DAL的一个桥梁,将UI层收集的数据传递给DAL,同时将DAL返回的数据传给UI供其显示;同时项目的功能实现当中的逻辑都是靠这一层来实现的。
下面是画的一个简单的图,帮助一下理解:
展示DEMO
关于三层怎么使用,我对他的认识也比较浅,通过自己敲的例子,来说一下三层吧。
UI
'收集的信息
string UserName = txtUserName.Text.Trim();
string password = txtpassword.Text.Trim();
'调用BLL层的数据类
Login.BLL .LoginManager mgr = new Login.BLL.LoginManager ();
Login.Model .UserInfo userUI = mgr.UserLogin(UserName, password);
'显示信息
MessageBox.Show("登陆用户:" + userUI.UserName);
DAL
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 UserName = @UserName and Password=@Password" ;
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);
user.Email = reader.GetString(3);
}
return user;
}
}
BLL
public Login.Model .UserInfo UserLogin (string userName, string password) //返回userinfo
{
//throw new NotImplementedException();
//访问D 层的
Login.DAL.UserDAO uDAO = new Login.DAL.UserDAO();
Login.Model.UserInfo userBLL = uDAO.SelectUser(userName, password);
if (userBLL != null)
{
Login.DAL.ScoreDAO sDAO = new DAL.ScoreDAO();
sDAO.UpdateScore(userName, 10);
return userBLL;
}
else
{
throw new Exception("登录失败!");
}
}
结语
对于三层的学习,还在继续,日后使用三层的时候一定要时刻想着:灵活性,复用性,可维护性。才疏学浅,多多指教!