欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【三层架构】

程序员文章站 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;
            }
        }

总结

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