zoukankan      html  css  js  c++  java
  • 三层总结

    前言
    三层敲完之后,有很多不理解的,代码直接看的视频并不知道之间的值是怎么传的,后来逐句调试了几遍,把每句话的代码基本都写上了,逐渐理解了。

    三层是什么
    三层架构把整个软件分为了三个层次:表现层(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

  • 相关阅读:
    npm install、npm install --save与npm install --save-dev、npm install -g区别
    react的几种loader
    React的Sass配置
    react中使用css的7种方式
    linux安装字体
    反向代理和正向代理的解释
    开源Odoo ERP13.2版本模块功能
    Git+码云构建自己的共享仓库
    .Net Core的依赖注入
    libpcap使用(1)
  • 原文地址:https://www.cnblogs.com/net-sky/p/11758229.html
Copyright © 2011-2022 走看看