JavaWeb06(三层架构&连接数据库)

简介: JavaWeb06(三层架构&连接数据库)

三层架构


1.什么是三层架构

  • 三层架构 就是将整个业务划分为三层:表示层、业务逻辑层、数据访问层。
  • 表示层主要是指与用户交互的界面,用于接收用户输入的数据和显示处理后用户所需要的数据;
  • 业务逻辑层 表示层和数据访问层之间的桥梁,实现业务逻辑,具体包含:验证、计算、业务规则等等;
  • 数据访问层 与数据库打交道,主要实现对数据的增、删、改、查。
  • 注意: entity(实体类) 它不属于三层中的任何一层, 但是它贯穿于三层,能在三层之间传递数据。

2. 层与层之间的关系

3.怎么理解三层架构

 

服务员:只管接待客人;

厨师:只管做客人点的菜;

采购员:只管按要求采购食材。

4.为什么需要三层架构

  • 区分层次的目的是为了“高内聚,低耦合”的思想;
  • 高内聚 :尽可能类的每个成员方法只完成一件事
  • 低耦合 :减少类内部,一个成员方法调用另一个成员方法
  • 从类角度来看, 高内聚低耦合:减少类内部,对其他类的调用
  • 从功能块来看, 高内聚低耦合:减少模块之间的交互复杂度
  • 简单来说,就是解耦:只做自己功能内的事。
  • 他们各司其职,服务员不用了解厨师如何做菜,不用了解采购员如何采购食材;厨师不用知道服务员接待了哪位客人,不用知道采购员如何采购食材;同样,采购员不用知道服务员接待了哪位客人,不用知道厨师如何做菜。
  • 任何一层发生变化都不会影响其他层:
  • 服务员(表示层)请假——另找服务员;
  • 厨师(业务逻辑层)辞职——招聘另一个厨师;
  • 采购员(数据访问层)辞职——招聘另一个采购员。

5.两层与三层的区别

两层: 当任何一个地方发生变化时,都需要重新开发整个系统。“多层”放在一层,分工不明确耦合度高,难以适应需求变化,可维护性低、可扩展性低;

 

三层:发生在哪一层的变化,只需更改该层,不需要更改整个系统。层次清晰,分工明确,每层之间耦合度低——提高了效率,适应需求变化,可维护性高,可扩展性高。

 

6.现状分析

我们目前是直接在表示层(servlet)调用了数据访问层dao(相当于服务员直接找到了采购员),不合适!因此,我们应该增加业务逻辑层biz,在servlet中调用biz,biz中调用dao !

7.面向接口编程.

旨在将设计与实现完全分离.

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各 对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的, 这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

8.使用三层架构实现登录功能

//将设计和实现完全分离
    //接口:只做设计
public interface IUserDao {
    /**
     * 登录
     * @param uname 用户名
     * @param upwd  密码
     * @return  用户对象
     */
    public User login(String uname,String upwd);
  }
/**
 * 数据访问层:增删改查
 * @author PC
 *
 */
public class UserDao implements IUserDao {
    //以前这个类怎么写  现在仍然怎么写
    private Connection con = null;
    private PreparedStatement ps =null;
    private ResultSet rs = null;
    @Override
    public User login(String uname, String upwd) {
        User u = null;
        try {
            con=DBHelper.getCon();
            String sql="select * from tb_user where uname=? and upwd=?";
            ps=con.prepareStatement(sql);
            ps.setString(1, uname);
            ps.setString(2, upwd);
            rs=ps.executeQuery();
            if(rs.next()) {
                u=new User(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.myClose(con, ps, rs);
        }
        return u;
    }
/**
 * 业务逻辑层
 * @author PC
 *
 */
public class UserBiz implements IUserBiz {
    //业务逻辑层biz  调用  数据访问层dao(里氏替换原则)
    IUserDao iud =new UserDao();
/**
*表示层
*/
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //表示层  调用 业务逻辑层里氏替换原则()
         IUserBiz iub = new UserBiz();
}

9.一剂强心针

                注意:以上两种任选其一,不要混合使用


相关文章
|
3月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
311 3
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
136 68
|
2月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
2月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
2月前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
2月前
|
消息中间件 数据库 云计算
微服务架构下的数据库事务管理策略####
在微服务架构中,传统的单体应用被拆分为多个独立的服务单元,每个服务维护自己的数据库实例。这种设计提高了系统的可扩展性和灵活性,但同时也带来了分布式环境下事务管理的复杂性。本文探讨了微服务架构下数据库事务的挑战,并深入分析了几种主流的事务管理策略,包括Saga模式、两阶段提交(2PC)以及基于消息的最终一致性方案,旨在为开发者提供一套适应不同业务场景的事务处理框架。 ####
|
2月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
62 3
|
3月前
|
关系型数据库 MySQL 数据库连接
DBeaver如何连接一个数据库
【10月更文挑战第27天】DBeaver 是一款功能强大的通用数据库管理工具,支持多种主流数据库。本文介绍了使用 DBeaver 连接数据库的基本步骤,包括下载安装、创建新连接、选择数据库类型、配置连接参数、测试连接以及最终连接到数据库。详细的操作指南帮助用户轻松管理和操作数据库。
540 9