【三层架构】

前言

   最近开始了三层的学习,对三层一点都不了解的我,学的是满头的雾水,值在三个层中间传来传去,然后对实例进行了调试,功夫不负有心人,下面我来分析一下三层。

哪三层

  • 表现层(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 UserName=@UserName and Password=@Password";

                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 UserName=@UserName and Password=@Password";

                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;
            }
        }

总结

   区分层次的目的就是为了实现“高内聚低耦合”,在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。仅仅三层就蕴含着大道理,也是为七层做准备,为七层打基础的过程。

猜你喜欢

转载自blog.csdn.net/ywq1016243402/article/details/82288231