三层架构介绍

三层架构详解 三层架构是一种常见的软件架构模式,用于将应用程序划分为三个不同的层次:表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer),每个层次都有不同的职责和功能。Java三层架构实战:从数据库表到控制层的完整开发流程。 阅读详情

一、什么是三层架构?

1.1概述

三层架构(3-tier architecture) 就是将整个业务应用划分为:

  • 界面层(User Interface layer) UI
  • 业务逻辑层(Business Logic Layer) BLL
  • 数据访问层(Data Access layer) DAL

在这里插入图片描述

1.2表示层

  • 表示层,又称界面层,是与用户交互的界面。位于最外层/最上层,离用户最近,用于接收用户输入的数据和显示处理后用户需要的数据。

  • 【接受请求,封装数据,调用业务逻辑层,响应数据(servlet,jsp)】

1.3业务逻辑层

  • 业务逻辑层,又称服务层,是表示层和数据访问层之间的桥梁。位于中间层,用来处理业务逻辑,具体包含:验证、计算、业务规则等等。

1.4数据访问层

  • 数据访问层,是对数据库访问的层。位于最里层/最下层,主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。

1.5层与层的关系

  • 表示层依赖于业务逻辑层
  • 业务逻辑层依赖于数据访问层

既然三层各司其责,那么怎么将三层联系起来?

这个时候实体层(Entity) 来了

  • Entity(实体层):它不属于三层中的任何一层,但是它是必不可少的一层
  • Entity在三层架构中的作用:
    • 1、实现面向对象思想中的"封装";
    • 2、贯穿于三层,在三层之间传递数据;(注:确切的说实体层贯穿于三层之间,来连接三层)
    • 3、每一层(UI—>BLL—>DAL)之间的数据传递(单向)是靠变量或实体作为参数来传递的,这样就构造了三层之间的联系,完成了功能的实现。

二、为什么需要三层架构?

三层架构的出现就是为了“高内聚,低耦合”

内聚:一个模块内各个元素的关联度。
耦合 :各个模块之间的关联度。
  • 高内聚 :尽可能一个类/模块只负责一个功能(一个模块内的元素关联度,越容易理解、修改和维护,出错就越少)。
  • 低耦合 :模块与模块之间的关联度要尽可能的低,避免牵一发而动全身
  • 从类角度来看:高内聚低耦合:减少类内部,对其他类的调用
  • 从功能块来看:高内聚低耦合:减少模块之间的交互复杂度

简单来说,就是解耦:减少模块之间的交互复杂度,自己做自己的事

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

在这里插入图片描述

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

在这里插入图片描述

三、层架构的应用

在这里插入图片描述

3.1原则

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

3.2例子:实现登录功能

表现层:jsp页面

	<body>
		<div class="container" style="margin-top:140px;height: 100px;">
			<div class="row">
				<div class="col-md-6 bg-primary">
					<h2 class="text-white">欢迎登录</h2>
					<p class="text-white">商城后台管理系统</p>
				</div>
				<div class="col-6 bg-white py-5">
					<form action="login.do" method="post" onsubmit="return myLogin()">
						<div class="mb-3">
							<label for="exampleInputEmail1" class="form-label">邮箱账号</label>
							<input placeholder="请输入邮箱账号" ptype="email" class="form-control" id="exampleInputEmail1"
								aria-describedby="emailHelp" name="username">
						</div>
						<div class="mb-3">
							<label for="exampleInputPassword1" class="form-label">密码</label>
							<input placeholder="请输入密码" type="password" class="form-control" id="exampleInputPassword1" name="password">
						</div>
						<div class="mb-3">
							<label for="exampleInputPassword1" class="form-label">验证码</label>
							<div class="input-group mb-3 " style="width: 200px;">
								<input id="yz" placeholder="请输入验证码" type="text" class="form-control">
								<button id="login" type="button" class="btn btn-primary">
									<span id="code" class="badge bg-danger">9888</span>
								</button>
							</div>
						</div>
						<button type="submit" class="btn btn-primary">登录</button>
					</form>
				</div>
			</div>
		</div>
	</body>

控制器Servlet

Servler通常作为控制器位于服务层和表示层之间,处理请求并相应地调用服务层方法执行业务逻辑

@WebServlet("/login.do")
public class LoginServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 设置编码
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		// 获取参数
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		// 处理请求
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		//实例化业务逻辑层对象
		IUserService ius=new UserServiceImpl();
		User login = ius.login(username, password);
		System.out.println(login);
		if (login != null) {
			session.setAttribute("Login", login);
			out.println("<script>alert('登录成功');location.href='good.jsp'</script>");
		} else {
			out.println("<script>alert('账号或密码错误');location.href='login.jsp'</script>");
		}

	}
}

业务逻辑层

/**
 * 业务逻辑层
 * 定义接口类
 * @author 许潜行
 *
 */
public interface IUserService {
	/**
	 * 用户登录方法
	 * @param uname
	 * @param upwd
	 * @return
	 */
	public User login(String uname,String upwd);
}

/**
 * 业务逻辑层
 * 实现接口类
 * @author 许潜行
 *
 */
public class UserServiceImpl implements IUserService {

	//实例化数据访问层对象
	private IUsersDao iud=new UsersDaoImpl();
	@Override
	public User login(String uname, String upwd) {
		return iud.login(uname, upwd);
	}

}

数据访问层

/**
 * 数据访问层
 * 定义接口
 * @author 许潜行
 *
 */
public interface IUsersDao {
	/**
	 * 用户登录方法
	 * @param uname
	 * @param upwd
	 * @return
	 */
	public User login(String uname,String upwd);
}


/**
 * 数据访问层
 * 实现接口类
 * @author 许潜行
 *
 */
public class UsersDaoImpl extends BaseDao implements IUsersDao {
	Connection conn = null;
	PreparedStatement ps = null;
	ResultSet rs = null;

	 public User login(String uname,String upwd) {
	        User u=null;
	        String sql="select * from tb_user where username=? and password=?";
	        try {
	        	rs=this.executeQuery(sql, new Object[] {uname,upwd});
	            if(rs.next()) {
	                u=new User(rs.getInt(1), rs.getString(2), rs.getString(3));
	            }
	        } catch (Exception e) {
	            e.printStackTrace();
	        } finally {
	            DBHelper.myClose(conn, ps, rs);
	        }
	        return u;
	    }
	    public static void main(String[] args) {
			User login = new UsersDaoImpl().login("user123@qq.com", "a12345");
			System.out.println(login);
		}

}

	

实体类:

public class User {
	private Integer id;
	private String username;
	private String password;

	public User() {
		// TODO Auto-generated constructor stub
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public User(Integer id, String username, String password) {
		super();
		this.id = id;
		this.username = username;
		this.password = password;
	}

	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}

}

BaseDao

/**
	 *增删改通用方法
	 * @param sql
	 * @param obj
	 * @return
	 */
	public int execute(String sql,Object...obj) {
		int n=0;
		try {
			//建立连接
			conn=DBHelper.getConn();
			//传入sql并执行
			ps=conn.prepareStatement(sql);
			//占位符赋值
			if (obj!=null) {
				for (int i = 0; i < obj.length; i++) {
					ps.setObject(i+1, obj[i]);
				}
			}
			//返回结果
			n=ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			//关闭资源
			DBHelper.myClose(conn, ps, rs);
		}
		return n;
	}
	/**
	 * 查询通用方法
	 * @param sql
	 * @param obj
	 * @return
	 */
	public ResultSet executeQuery(String sql,Object...obj) {
		try {
			//建立连接
			conn=DBHelper.getConn();
			//传入sql并执行
			ps=conn.prepareStatement(sql);
			//占位符赋值
			if (null!=obj) {
				for (int i = 0; i < obj.length; i++) {
					ps.setObject(i+1, obj[i]);
				}
			}
			//返回结果
			rs=ps.executeQuery();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return rs;
	}


JavaWeb简易入门(三) 三层架构(该部分引自菜鸟教程) 什么是三层? UI(表现层): 主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。 BLL:(业务逻辑层): UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。 DAL:(数据访问层): 与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库... 阅读详情

相关推荐

移动应用架构解析:用户界面层、业务逻辑层、数据访问层

移动应用的成功离不开一个良好的架构设计,在移动应用开发过程中,合理的层次结构对于应用的可维护性、可扩展性和可测试性至关重要。移动应用的常见层次结构包括用户界面层、业务逻辑层、数据访问层,但是随着跨平台开发框架的不断发展,以React Native、Flutter为代表的工具已经深入到移动应用架构中,本文希望探讨在每个层次中使用React Native和Flutter等开发框架的优势。

POHOU23的博客 3990

什么是三层架构

三层架构 三层架构来源于后端开发的一种分层的思想。 引用自百科的解释: 三层架构(3-tier architecture)通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。 区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(

weixin_49066399的博客 4万+

软件工程_三层架构介绍

一、三层架构 1、什么是三层? UI(表现层):主要是指与用户交互的界面。用于接收用户输入的数据和显示处理后用户需要的数据。 BLL:(业务逻辑层):UI层和DAL层之间的桥梁。实现业务逻辑。业务逻辑具体包含:验证、计算、业务规则等等。 DAL:(数据访问层):与数据库打交道。主要实现对数据的增、删、改、查。将存储在数据库中的数据提交给业务层,同时将业务层处理的数据保存到数据库。(当...

云计算架构师的博客 2289

三层架构 详解

文章目录前言什么是三层架构?为什么要用三层架构?优缺点:怎么用三层架构?实例演练: 前言 当看到一个陌生的名词时你会怎么想?what?way?how? 现在就按照这个思维框架走进“三层架构”。 什么是三层架构? 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。 1、表示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的

潘小蓝的博客 5293

SpringBoot中的三层架构简单介绍

声明业务方法,不包含具体实现。便于后续扩展(如实现类切换为分布式版本)。代码示例/*** 获取所有用户(业务规则:按创建时间降序排序)*//*** 根据ID获取用户(业务规则:如果用户不存在,抛出异常)*//*** 创建用户(业务规则:用户名和邮箱不能为空)*/代码示例@Mapper// 查询所有用户// 根据ID查询用户// 插入用户(返回自增ID)

H545569的博客 2253

三层架构介绍

三层架构模式介绍 三层架构模式: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了 “高内聚低耦合” 的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。 表

m0_62198213的博客 3186

什么是三层架构?简单的介绍三层架构

三层架构(3-tierarchitecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(Presentation layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。    MVC也分为三层,但不是我们所说的三层架构。MVC只相当于三层架构中的UI。

LoveSummer 1万+

三层架构详细介绍

一、分层架构-3层架构-多层架构 逻辑关系图 架构:   架构一般是针对整个系统的,并非对某个单独的问题(单独的问题可以用模式等来解决)   针对整个系统的“一张蓝图”,对系统的抽象。架构与具体的语言平台无关。   架构设计、模式应用的经验积累的具体代码实现,方便以后的复用。Asp.net mvc、NHibemate、NSpring、... 模式:   软件开发中遇到的一些...

weixin_30384031的博客 1096

三层架构简单介绍

目录 前言 一、什么是三层架构 各模块功能划分表: 三层架构运作流程图: 三层架构中各功能模块如何联系? Entity在三层架构中的作用: 三层及实体层之间的依赖关系: 二、为什么使用三层架构 三、三层与两层的区别 三层架构的优势: 三层架构的劣势: 前言 在阅读本篇文章时请关注如下问题: 1.什么是三层架构? 2.为什么使用三层架构? 3.三层与以往使用的两层相比有什么不同?它的优势在哪里? 4.如何学好三层架构?如何应用三层架构? 一、什么是三层架构 ...

不想掉头发$的博客 1万+

MVC(Model-View-Controller)架构模式和三层架构介绍

本文系统解析MVC架构模式的核心组件与交互流程,通过用户注册案例演示模型、视图、控制器的协同机制,对比MVC与三层架构的异同及互补关系,阐述分层设计如何提升系统可维护性和扩展性,为现代Web开发提供清晰的架构设计指导。

m0_73941339的博客 1万+

java ee 三层架构_JavaEE——三层架构模式介绍

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。三层架构模式介绍三层架构模式:三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data ac...

weixin_33657398的博客 1865

三层架构、MVC、springMVC介绍

三层架构 我们开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也即是浏览器/服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多,现在Java项目中也都是基于三层架构设计的。 表现层: 也就是我们常说的web层。它负责介绍客户端的请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。 表现层包括展

CVPR收割机的博客 985

JavaWeb 三层架构简单介绍与案例实现

本文介绍JavaWeb开发中的三层架构模式(表现层、业务逻辑层、数据访问层),并通过一个用户管理系统案例完整展示了其实现过程。案例采用SpringBoot框架,包含实体类、DAO接口及实现、Service接口及实现、Controller控制层等核心代码,使用Hutool工具简化文件操作。项目结构清晰,实现了层间解耦,展示了从数据读取到展示的完整流程,控制台输出用户数据验证了架构的有效性。该案例非常适合JavaWeb初学者理解分层开发思想,代码可直接复用。

2402_84971234的博客 1475

三层架构简要介绍

三层架构是哪三层 界面层(User Interface layer) 业务逻辑层(Business Logic Layer) 数据访问层(Data access layer) 如何搭建三层架构 步骤1: 文件---新建---项目---Windows窗体应用程序 名称:UIL 解决方案名称:Demo3Tier 选中解决方案名称:Demo3Tier 添加---新建项目---类库 名称:BLL 选中解决方案名称:Demo3Tier 添加---新建项目---类库 名称:DAL 选中解决方案名称:D

baidu_39283498的博客 374
上一篇: JavaWeb02
下一篇: Jsp相关介绍
许潜行
博客等级 码龄4年 296粉丝 75原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值