Java三层架构、表现层-业务层-持久层

news2024/11/17 1:31:52

三层架构

什么是 Java 三层架构

三层架构是指:视图层view(表现层)服务层service(业务逻辑层)持久层Dao(数据访问层)
Java的三层架构是指将Java程序分为三个主要层次,分别是表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。

  1. **表现层:**表现层是应用程序的用户接口部分,负责与用户进行交互。它可以包括Web界面、移动应用程序界面以及API接口等,主要任务是呈现信息以及提供用户输入的途径。
  2. **业务层:**业务逻辑层是应用程序的核心部分,包含了实现业务逻辑的代码,位于表示层和数据访问层之间,主要处理用户请求并访问数据库。
  3. **持久层:**数据访问层负责与数据库进行交互,提供数据访问对象用于执行数据库操作,如查询、插入、更新等,主要任务是抽象底层数据访问技术,使得业务逻辑层可以专注于业务逻辑的实现,而不必关心底层数据的存储和访问细节。

层次结构和调用关系

三层架构是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

整个项目的层次关系如下:

  1. 表示层(UI):这一层是直接与用户交互的界面,包括各种用户输入和输出,它通常由前端框架(如React、Angular、Vue等)构成。
  2. 业务逻辑层(BLL):这一层处理所有的业务逻辑和规则,它接受表示层的请求,进行相应的处理,然后返回结果给表示层。这一层通常由后端框架(如Spring、Spring Boot等)构成。
  3. 数据访问层(DAL):这一层直接和数据库进行交互,处理数据的增删改查操作。它通常由ORM框架(如Hibernate、MyBatis等)构成。

在调用和依赖关系上:

  1. 表示层(UI)只依赖于业务逻辑层(BLL),不直接依赖于数据访问层(DAL)。它通过调用业务逻辑层的接口来请求数据,然后接收业务逻辑层返回的数据。
  2. 业务逻辑层(BLL)既依赖于表示层(UI),也依赖于数据访问层(DAL)。它接收表示层的请求,调用数据访问层的数据,然后将处理结果返回给表示层。
  3. 数据访问层(DAL)依赖于业务逻辑层(BLL)。它只负责处理数据的增删改查操作,不直接与用户交互。

这种层次结构提高了开发效率,有利于项目的更新和维护工作。
image.png

其他

是的,使用Spring框架时,通常不再采用传统的三层架构设计,而是使用Spring的组件模型进行设计。
Spring框架提供了很多组件和模块,例如Spring MVC、Spring Data、Spring Service、Spring DAO等,这些组件和模块可以帮助开发者构建一个完整的Web应用程序。
在Spring框架中,表现层通常使用Spring MVC来实现,通过Controller和View来处理用户请求和展示数据;业务逻辑层通常使用Spring Service来实现,通过Service接口和实现类来处理业务逻辑;数据访问层通常使用Spring Data或MyBatis等持久层框架来实现,通过Repository或Mapper来访问数据库。

当然,具体的项目结构设计和命名习惯还需要根据项目需求和团队约定来确定。


随着Spring框架的普及,使用传统的三层架构的项目越来越少。相对于SSM框架,传统的三层架构存在以下缺陷和不足:

  1. 开发效率较低:传统的三层架构需要开发者手动编写大量的代码来构建每一层,而SSM框架集成了很多常用的功能和组件,可以更快地完成开发。
  2. 组件集成困难:传统的三层架构需要开发者手动集成各种组件,如ORM框架、事务管理等,而SSM框架提供了一站式的解决方案,可以更容易地集成各种组件。
  3. 代码可读性较差:由于传统的三层架构代码量较大,而且各层之间的耦合度较高,代码可读性较差。而SSM框架的代码结构清晰,易于维护和扩展。
  4. 数据库访问方式不灵活:传统的三层架构通常使用ORM框架来访问数据库,相对于SSM框架的JDBC或MyBatis等持久层框架,数据库访问方式不够灵活。
  5. 配置复杂:传统的三层架构通常需要大量的配置文件,如Spring配置文件、事务配置文件等,而SSM框架的配置相对简单,易于维护。

总之,相对于SSM框架,传统的三层架构开发效率较低、组件集成困难、代码可读性较差、数据库访问方式不灵活且配置复杂等。因此,在大多数情况下,使用Spring框架和SSM架构是更好的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1118867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会议剪影 | 思腾合力携AI服务器亮相PRCV 2023,并作主题演讲

第六届中国模式识别与计算机视觉大会(PRCV 2023)于2023年10月13日至15日在厦门国际会议中心酒店举办。本届会议主题为“相约鹭岛,启智未来”。 会议旨在汇聚国内国外模式识别和计算机视觉理论与应用研究的广大科研工作者及工业界同行&#xf…

【LeetCode刷题(数据结构与算法)】:将二叉搜索树转化为排序的双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点 特别地,我们希望可以 就地 完…

pip 时报错 no such option: --bulid-dir 的解决办法

Pycharm 安装第三方库报错及解决方案——no such option: --build-dir Pycharm 安装第三方库报错及解决方案——no such option: --build-dir 最近在学习路径规划相关内容,在运行GitHub上下载例程时缺少“plotly”库,根据网上查到的安装步骤操作&#x…

计算机组成原理 new08 电路 $\color{red}{Δ}$

文章目录 ALU基本逻辑运算复合逻辑的运算 一位全加器串行加法器串行进位的并行加法器并行进位的并行加法器(全先行进位加法器)这个明天再写。加法电路原理总结ALU和加法器有什么关系加法器原理ALU总结无符号整数/补码加减法加法器标志位的生成补码加减法发运算的溢出判断溢出电…

Python实现一个简单的http服务,Url传参输出html页面

摘要 要实现一个可以接收参数的HTTP服务器,您可以使用Python标准库中的http.server模块。该模块提供了一个简单的HTTP服务器,可以用于开发和测试Web应用程序。 下面是一个示例代码,它实现了一个可以接收参数的HTTP服务器: 代码…

C1N短网址 - 是如何做到行业领先的

今天从技术角度来聊下短网址的一些事情,市面上的短网址发展基本上经历了几个阶段。 短网址发展的几个阶段: 第一阶段:网址缩短,很纯粹的功能,各个大小公司都在做,门槛很低。典型代表:百度短网…

Python+playwright 实现Web UI自动化

实现Web UI自动化 技术:Pythonplaywright 目标:自动打开百度浏览器,并搜索“亚运会 金牌榜” 需安装:Playwright (不用安装浏览器驱动) # 使用浏览器,并可视化打开 browser playwright.ch…

Power BI 傻瓜入门 3. 选择Power BI的版本

本章内容包括: Excel与Power BI的比较选择Power BI的桌面版和服务版之间的差异了解Microsoft提供的许可选项 挑选正确版本的Power BI可能就像参观世界上最大的糖果店:你可以从许多细微差别的替代品中进行选择。选择可以归结为想要、需要、规模&#xf…

用HFSS仿真平面线圈的电感量

用HFSS工具仿真平面线圈的电感量 平面线圈是指在平面上绕制而成的线圈,如PCB上的电感线圈、无线供电使用的金属丝绕制而成的线圈等。根据线圈的不同形状可将平面线圈分为方形线圈,六角形线圈、八角形线圈、螺旋原型线圈等。 网络上的计算平面线圈电感量…

Tmux:终端复用器的基本使用(二)

相关阅读 Tmuxhttps://blog.csdn.net/weixin_45791458/category_12472796.html?spm1001.2014.3001.5482 上一篇文章列举了一些关于tmux中会话的基本使用方法,但会话并非是tmux的最强大的功能,tmux还能在一个会话中创建多个窗口(windows),并…

springboot配置打野sql语句,而不打印结果

application.yml,注释掉mybatis-plus,增加logging,级别debug

【暴力剪枝】CF1708D

https://codeforces.com/contest/1708/problem/D 题意 思路 这样的操作下,数列减的速度是非常快的,也就是说,易出现很多的0,0的操作没啥意义,所以我们要找到第一个 >0 的数对其后的序列进行排序,就能大…

Vue中的路由是如何工作的?Vue Router的基本用法。

在Vue中,路由是用于管理应用程序中不同页面之间导航的机制。 Vue Router是Vue.js官方提供的路由管理器,它通过集成到Vue应用程序中,提供了一种简单而强大的方式来实现单页应用程序(SPA)的路由功能。 以下是Vue Router的基本用法: 1:安装Vue Router: 首先,使用npm或…

二维码智慧门牌管理系统升级解决方案:地图展示

文章目录 前言一、地图展示功能二、其他升级和改进 前言 随着城市的发展和信息化建设的推进,二维码智慧门牌管理系统在社区管理、物流配送、巡检巡查等多个领域发挥着越来越重要的作用。为了更好地满足用户需求,提升管理效率和服务质量,我们…

【JavaEE重点知识归纳】第9节:抽象类和接口

目录 一:抽象类 1.概念 2.语法 3.特性 4.作用 二:接口 1.概念 2.语法 3.接口使用 4.特性 5.实现多个接口 6.接口间的继承 7.Comparable接口 8.Clonable接口 9.抽象类和接口的区别 一:抽象类 1.概念 (1&#xff0…

【C++】类型转换(dynamic_cast,const_cast,static_cast,reinterpret_cast)

🌏博客主页: 主页 🔖系列专栏: C ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 文章目录 C语言中的类型转换一、static_cast二、reinterpret_cast三、 const_cast四、 dynamic…

xlive.dll下载安装方法分享,教你快速修复xlive.dll文件

在运行某些应用程序或游戏时,你可能会遭遇到"xlive.dll缺失"错误提示,这可能导致程序无法正常运行。本文将向你介绍一些可行的解决方法教你下载xlive.dll文件,并详细阐述xlive.dll是什么文件以及导致其缺失的原因。 一.理解"x…

2023-10-19 指针与指针的指针,我就不信你脑壳不疼

点击 <C 语言编程核心突破> 快速C语言入门 指针与指针的指针&#xff0c;我就不信你脑壳不疼 前言一、从一个链表实现说起二、指针, 指针的指针, 头疼的来源总结 前言 C实现一个链表&#xff0c;为什么有时候传入指针&#xff0c;有时候传入指针的指针&#xff0c;究竟…

编程接口:eBPF 程序是怎么跟内核进行交互的?

目录 背景 BPF 系统调用 BPF 辅助函数 BPF 映射 BPF 类型格式 (BTF) 小结 背景 用高级语言开发的 eBPF 程序&#xff0c;需要首先编译为 BPF 字节码&#xff0c;然后借助 bpf 系统调用加载到内核中&#xff0c;最后再通过性能监控等接口与具体的内核事件进行绑定。这样&…

VNC Viewer安装教程(保姆级安装)

一、 VNC Viewer简介 VNC是一款开源的远程控制软件&#xff0c;功能强大且高效实用&#xff0c;其性能不逊色同类软件&#xff0c;它的工作原理和WIN远程控制软件类似&#xff0c;但是更为重要的是&#xff0c;VNC-Viewer完全免费开源&#xff0c;更新速度也比较快&#xff01;…