2024.3.18JAVA编程的三层架构模式理解

2024.3.18JAVA编程的三层架构模式理解

三层架构

controller:控制层,接收前端发送的请求。对请求进行处理,并响应数据。
service:业务逻辑层,处理具体的业务逻辑数据。
dao:数据访问层(Data Access Object),即持久层,负责数据的增、删、改、查。

案例代码

下面的例子对三层架构比较清晰。在这个示例代码中,首先定义了一个 usernames.txt 文件,通过读取文件模拟整个程序的运行过程。该文件中存储了多个用户名,每行一个用户名。UserDaoImpl 类中的 getUserNameById 方法通过读取该文件,并返回指定行的用户名作为模拟的数据。然后在 Main 类中调用 getUserNameById 方法来获取指定行的用户名,并输出结果。了解三层分工后就比较好理解三层架构了。

dao层

主要用于实现如何从后端的数据库/文件读取数据的功能,同时也可以执行数据的增、删、改、查。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;// UserDao.java
public interface UserDao {String getUserNameById(int userId);
}// UserDaoImpl.java
public class UserDaoImpl implements UserDao {private static final String FILE_PATH = "usernames.txt";@Overridepublic String getUserNameById(int userId) {try (BufferedReader br = new BufferedReader(new FileReader(FILE_PATH))) {String line;int count = 0;while ((line = br.readLine()) != null) {count++;if (count == userId) {return line;}}} catch (IOException e) {e.printStackTrace();}return null;}
}

service层

主要用于实现数据的处理逻辑,本处仅用于演示数据没有进行处理。

// UserService.java
public interface UserService {String getUserNameById(int userId);
}// UserServiceImpl.java
public class UserServiceImpl implements UserService {private UserDao userDao;public UserServiceImpl(UserDao userDao) {this.userDao = userDao;}@Overridepublic String getUserNameById(int userId) {return userDao.getUserNameById(userId);}
}

control层

主要用于实现与前端交互,本处仅用于演示没有进行编写。

// Main.java
public class Main {public static void main(String[] args) {UserDao userDao = new UserDaoImpl();UserService userService = new UserServiceImpl(userDao);// 测试功能int userId = 3; // 假设要获取第三个用户名String userName = userService.getUserNameById(userId);if (userName != null) {System.out.println("User Name: " + userName);} else {System.out.println("User not found");}}
}

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

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

相关文章

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

MATLAB的使用(一)

一,MATLAB的编程特点 a,语法高度简化; b,脚本式解释型语言; c,针对矩阵的高性能运算; d,丰富的函数工具箱支持; e,通过matlab本体构建跨平台; 二,MATLAB的界面 工具栏:提供快捷操作编辑器…

2024年腾讯云服务器租用价格表_1个月一年3年5年和1小时费用表

腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格61元一年、2核2G4M价格99元一年,540元三年、2核4G5M带宽165元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月,轻量4核16G12M服务器32元1个月、312元一年&#x…

RabbitMQ介绍及搭建

架构 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,使用erlang语言编写,依赖Erlang环境运行。 Broker:运行消息队列服务进程的节点,包含Exchange、Queue; Producer:消…

Java进阶 Maven基础

资料格式 配置文件 com.itheima Java代码 Statement stat con.createStatement(); 示例 com.itheima 命令 mvn test - Maven简介 传统项目管理状态分析 Maven 是什么 Maven的本质是一个项目管理工具,将项目开发过程抽象成一个项目对象模型(POM&…

HTTP 工作流程请求响应 - 面试常问

文章目录 HTTP 工作流程请求和响应格式HTTP请求格式请求行:请求头部字段:空行:消息正文(请求正文): HTTP响应格式状态行:响应头部字段:空行: HTTP方法HTTP状态码常用HTTP…

yocto编译测试

源码下载 git clone -b gatesgarth git://git.yoctoproject.org/poky lkmaolkmao-virtual-machine:~/yocto$ git clone -b gatesgarth git://git.yoctoproject.org/poky Cloning into poky... remote: Enumerating objects: 640690, done. remote: Counting objects: 100% (13…

整型数组按个位值排序 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素&#xf…

四.排序(冒泡/选择)

目录 11-排序介绍 常见排序算法: 12-冒泡排序介绍 代码要求: 思路: 13-冒泡排序 代码: 14-选择排序 简单写法: 好的写法: 11-排序介绍 排序:将一组“无序”的记录序列调整为“有序”的记录序列。 列表排序:将无序列表变为有序列表 输入&#…

CentOS 7 编译安装 Nginx

CentOS 7 编译安装 Nginx 背景下载 Nginx 源码包安装依赖包编译添加环境变量添加守护查考文献 背景 一开始使用 docker 搭建了一个 web 服务器,但是由于 docker 不太方便的部署 TLS 证书,故使用 Nginx 做反向代理,实现 https 连接。 下载 N…

C#进阶实践项目(俄罗斯方块)

CSharp进阶实践项目--俄罗斯方块 1.需求分析 2.复用贪吃蛇开始等场景切换的代码 (自己写一遍,不难!!!) 入口: 更新接口: Game 类: BeginOrEndBaseScene 类:…

【Flink】Flink 中的时间和窗口之窗口API使用

1. 窗口的API概念 窗口的API使用分为按键分区和非按键分区,在定义窗口操作之前,首先就要确定好是基于按键分区Keyed的数据流KeyedStream来开窗还是基于没有按键分区的DataStream上开窗。 1.1 按键分区窗口(Keyed Windows) 按键…

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages)designWidth的用法

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages) 导读 前面几篇文章,我们陆续分析了entry->src->main下的module.json5中的各个字段的含义及作用。目前剩余pages和abilities两个字段,本篇文章一起来了解pages。 过程有错…

mysql笔记:19. 主从复制和主主复制

文章目录 一、主从复制基础1. 主从复制的定义2. 主从复制的原理3. 实战:搭建MySQL的主从复制 二、主从复制的管理1. 用户权限管理2. 日常任务管理2.1. 监控主从复制的状态2.2. 控制主从复制的任务2.2.1. 在从节点上启动和停止主从复制2.2.2. 在从节点上启动和停止I/…

用Stable Diffusion生成同角色不同pose的人脸

随着技术的不断发展,我们现在可以使用稳定扩散技术(Stable Diffusion)来生成同一角色但不同姿势的人脸图片。本文将介绍这一方法的具体步骤,以及如何通过合理的提示语和模型选择来生成出更加真实和多样化的人脸图像。 博客首发地…

【Python】进阶学习:一文解决如何从指定的源目录中,挑选出符合条件的文件,并将这些文件复制到目标目录中

【Python】进阶学习:一文解决如何从指定的源目录中,挑选出符合条件的文件,并将这些文件复制到目标目录中 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化…

cordova cordova-hot-code-push-plugin 插件热更新

node 版本 node-v10.18.0 ,node-v16.14.2-x64 添加插件 Cordova Hot Code Push cordova plugin add cordova-hot-code-push-plugin 添加热更新工具 cordova-hot-code-push-cli npm install -g cordova-hot-code-push-cli 添加cordova-hcp.json文件 此文件是用于…

音频剪辑软件评测,哪一款最适合你?

“音频剪辑小白求解!我正在制作一部个人纪录片,拍摄了很多原始音频素材,但是需要进行剪辑和整理才能使用。我完全不懂音频剪辑,请问有没有简单易懂的教程或者方法,帮助我快速上手并完成剪辑工作呢?” 随着…

5_相机标定_3_calibrateCamera()例子

上次介绍了calibrateCamera()接口参数,这次实际调用。 程序中所用标准标定板。 一、图片预处理 使用的图片原像素是3072*2048,即600万像素,处理起来不快;改成了560*420,即20万像素。调用opencv接口如下: //…

阿里通义灵码体验

点击访问体验 之前有体验过github的代码助手,奈何收费了,上周发现有一个免费的代码助手。 下载安装 vscode 搜索扩展 TONGYI Lingma 安装完成后登陆即可体验 写注释让他写代码 根据上下文自动补充 这里我只写了一个方法名,getAgencyList…