三层架构

  • 为什么需要分层
  • 软件设计中的分层模式
  • 三层模式
  • 分层的实现
  • 创建用户实体类
  • 编写用户实体类
  • 编写数据访问层
  • 编写数据访问接口
  • 编写数据访问接口的实现
  • 编写业务逻辑层
  • 编写业务逻辑接口
  • 编写业务逻辑接口的实现
  • 编写表示层
  • JSP页面调用业务逻辑层


为什么需要分层

JSP开发具有弊端,业务的代码与JSP代码混在一起,不易阅读,不易于代码的维护

在企业进行Web项目的开发时,主要会考虑到以下几点:

  1. 系统的耦合性(紧密度):企业比较注重
  • 系统每个部分的联系程度
  • 一般耦合性越低越好
  1. 系统的拓展性
  2. 代码的可读性:对程序员比较重要
  3. 业务的拓展性

为了降低耦合性(解耦),我们大多选择使用三层架构

软件设计中的分层模式

分层模式

  • 分层模式是最常见的一种架构模式
  • 分层模式是很多架构模式的基础

分层

  • 将解决方案的组件分隔到不同的层中
  • 在同一层中组件之间保持内聚性
  • 层与层之间保持松耦合

三层模式

三层模式的划分

  • 表示层
  • 业务逻辑层
  • 数据库访问层

除了这三层外,还有一层是:实体层

三层架构怎么发布 三层架构开发模式_java

三层模式的关系

三层架构怎么发布 三层架构开发模式_业务逻辑_02


三层开发遵循的原则
  1. 上层依赖其下层,依赖关系不跨层
  • 表示层不能直接访问数据访问层
  • 上层调用下层的结果,取决于下层的实现
  1. 下层不能调用上一层
  2. 下一层不能依赖上一层
  • 上层的改变不会影响下一层
  • 下层的改变会影响上一层获得的结果
  1. 在上一层中不能出现下一层概念
  • 分工明确,各司其职

分层开发的特点

  1. 下层不知道上层的存在
  • 仅完成自身的功能
  • 不关心结果如何使用
  1. 每一层仅知道其下层的存在,忽略其他层的存在
  • 只关心结果的取得
  • 不关心结果的实现过程
  • JSTL通常会与EL表达式合作实现JSP页面的编码

分层开发的优势

  • 职责划分清晰
  • 无损替换
  • 复用代码
  • 降低了系统内部的依赖程度

分层的实现

创建用户实体类

编写用户实体类

public class User {
    	private int id;
    	private String username;
    	private String password;
   		public int getId() {
         	return id;
    	}
    	public void setId(int id) {
        		this.id = id;
    	}
    	//省略了后续的set/get方法
}

编写数据访问层

编写数据访问接口

public interface UserDao {
    	//根据用户进行查找,返回用户列表
    	public boolean findUser(User user);
}

编写数据访问接口的实现

public class UserDaoJdbcImpl implements UserDao{
public boolean findUser(User user){
    	Connection con = null;
    	PreparedStatement pStatement = null;
    	ResultSet res = null;
    	/** 调用创建数据库连接的方法 获得连接,实现用户名和密码查询*/
}

编写业务逻辑层

编写业务逻辑接口

//编写业务逻辑控制接口UserBiz
public interface UserBiz {
     	public boolean login(User user);
}

编写业务逻辑接口的实现

public class UserBizImpl implements UserBiz{
    	public List login(User user){
        		UserDao ud = new UserDaoJdbcImpl();
        		boolean flag = ud.findUser(user);
        		return flag;
    	}
}

编写表示层

JSP页面调用业务逻辑层

<%@page import="org.jbit.bean.*" %>
<%@page import="org.jbit.biz.*" %>
<%@page import="org.jbit.biz.impl.*" %>
<%
    String uname=request.getParameter("user");
    String upwd=request.getParameter("pwd");
    User user = new User();
    user.setUsername(uname);
    user.setPassword(upwd);
    UserBiz ub = new UserBizImpl();
    boolean flag = ub.login(user);
    if(flag)
        response.sendRedirect("welcome.jsp");	
    else
        response.sendRedirect("login.jsp");
%>