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.一剂强心针

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


相关文章
|
7月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
148 13
|
3月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
1081 11
|
9月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
9月前
|
数据库连接 应用服务中间件 PHP
|
8月前
|
安全 Linux 网络安全
YashanDB数据库服务端SSL连接配置
YashanDB支持通过SSL连接确保数据传输安全,需在服务端生成根证书、服务器证书及DH文件,并将根证书提供给客户端以完成身份验证。服务端配置包括使用OpenSSL工具生成证书、设置SSL参数并重启数据库;客户端则需下载根证书并正确配置环境变量与`yasc_env.ini`文件。注意:启用SSL后,所有客户端必须持有根证书才能连接,且SSL与密码认证独立运行。
|
5月前
|
存储 移动开发 JavaScript
快应用推广连接底层技术与架构以及如何结合自身系统分销的推广逻辑和技术对接-优雅草卓伊凡|果果|Ant
快应用推广连接底层技术与架构以及如何结合自身系统分销的推广逻辑和技术对接-优雅草卓伊凡|果果|Ant
113 4
快应用推广连接底层技术与架构以及如何结合自身系统分销的推广逻辑和技术对接-优雅草卓伊凡|果果|Ant
|
5月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
464 0

热门文章

最新文章