JavaWeb.三层架构

前言:今天我们来讲一下分层,我们需要知道写web项目为什么需要分层,讲到这里我们不得不提jsp开发的弊端——业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护。分层就是用来解决这个弊端的。

目录

一.分层与分层模式

分层模式

分层

二.分层开发的特点与优势

特点

优势

三.三层架构

三层模式的划分

 层与层之间的关系

三层开发遵循的原则

为什么使用三层?

四.面向接口编程

 五.案例


一.分层与分层模式

分层模式

a.分层模式是最常见的一种架构模式

b.分层模式是很多架构模式的基础

分层

a.将解决方案的组件分隔到不同的层中

b.在同一个层中组件之间保持内聚性

c.层与层之间保持松耦合

二.分层开发的特点与优势

特点

下层不知道上层的存在

a.仅完成自身的功能

b.不关心结果如何使用

每一层仅知道其下层的存在,忽略其他层的存在

a.只关心结果的取得

b.不关心结果的实现过程

c.JSTL通常会与EL表达式合作实现JSP页面的编码

优势

职责划分清晰

无损替换

复用代码

降低了系统内部的依赖程度

三.三层架构

三层模式的划分

表示层 :主要是指用户交互的界面,用于接收用户输入的数据和显示处理后用户需要的数据
业务逻辑层 :表示层和数据库访问层之间的桥梁,实现业务逻辑,具体包含:验证、计算、业务规则等等
数据访问层 :与数据库打交道,主要实现对数据的增、删、改、查

 层与层之间的关系

JavaWeb.三层架构_第1张图片 

三层开发遵循的原则

1.上层依赖其下层,依赖关系不跨层

a.表示层不能直接访问数据访问层

b.上层调用下层的结果,取决于下层的实现

2.下一层不能调用上一层

3.下一层不依赖上一层

a.上层的改变不会影响下一层

b.下层的改变会影响上一层得到的结果

4.在上一层中不能出现下一层的概念

a.分工明确,各司其职

为什么使用三层?

用三层架构的目的就是为了实现 高内聚低耦合 的思想:
高内聚 :尽可能类的每个成员方法只完成一件事
低耦合 :减少类内部,一个成员方法调用另一个成员方法
从类角度来看, 高内聚低耦合:减少类内部,对其他类的调用
从功能块来看, 高内聚低耦合:减少模块之间的交互复杂度
简单来说,就是 解耦 :只做自己功能内的事

四.面向接口编程

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

 

biz : 存放业务逻辑层的接口
biz.impl :存放业务逻辑层的实现类
dao :存放数据访问层的接口
dao.impl :存放数据访问层的实现类
JavaWeb.三层架构_第3张图片

 五.案例

在你的项目中建好以上的包、类:

JavaWeb.三层架构_第4张图片

用户登录首页代码:

               
               
           

数据访问层的接口代码:IUserDao.java

package com.dao;
import com.pojo.User;
/**
 *针对数据库操作的接口
 */
public interface IUserDao {
    //查询方法
    User queryByName(User user);
}

数据访问层接口的实现类代码:UserDaoImpl.java

package com.dao.impl;
import com.dao.IUserDao;
import com.pojo.User;
/**
 *用户的数据库操作接口实现类
 *实现了:IUserDao接口,重写查询方法
 */
public class UserDaoImpl implements IUserDao{
    @Override
    public User queryByName(User user) {
        //根据用户名和密码去数据库查询数据
          if("aa".equals(user.getUsername())&&"123".equals(user.getPassword())){
                return new User("","");
            }
        return null;
    }    
}

业务逻辑层接口代码:IUserBiz.java

package com.biz;
import com.pojo.User;
/**
 *    IUserBiz:I代表接口,UserBiz代表用户的业务逻辑
 *    IUserBiz:针对用户的业务逻辑的接口
 */
public interface IUserBiz {
    //接口:规定实现类的规范
    //实现类必须要有登录方法
    String login(User user);//在接口中直接声明登录方法,不用代码体{}
}

业务逻辑层接口的实现类代码:UserBizImpl.java 

package com.biz.impl;
import com.biz.IUserBiz;
import com.dao.IUserDao;
import com.dao.impl.UserDaoImpl;
import com.pojo.User;
/**
 * 业务逻辑层:
 * 用户逻辑接口实现类:实现了IUserBiz接口,就必须重写接口中的方法
 */
public class UserBizImpl implements IUserBiz{
    //业务逻辑层(IUserBiz)调用数据库操作层(userDao)
    //李氏替换原则
    private IUserDao userDao=new UserDaoImpl();
    @Override
    public String login(User user) {
        //biz包:处理数据
         //1.先拿到dao包的数据
        User u = userDao.queryByName(user);
        //2.处理数据
        if(u!=null){
            return "登录成功";
        }
        return "登录失败";
    }
}

处理首页用户登录的代码: 

<%
    //从请求中拿数据
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    User user = new User(username, password);
 
    //登录:
    //表示层(jsp)调用业务逻辑层(IUserBiz)
    //先new
     IUserBiz userBiz=new UserBizImpl();
    //再调用业务逻辑层(IUserBiz)的方法
    String message = userBiz.login(user);
 
    //输出结果
    out.print(message);
%>

今天就到这里,拜拜ヽ(✿゚▽゚)ノ 。

你可能感兴趣的:(web,java,eclipse,js)