当前位置: 首页 > news >正文

分层-三层架构

文章目录

  • 介绍
  • 代码拆分
    • Dao层
    • server层
    • controller层
  • 运行结果

介绍

在我们进行程序设计以及程序开发时,尽可能让每一个接口、类、方法的职责更单一些(单一职责原则)。
单一职责原则:一个类或一个方法,就只做一件事情,只管一块功能。这样就可以让类、接口、方法的复杂度更低,可读性更强,扩展性更好,也更利于后期的维护。
从组成上看可以分为三个部分:

  • 数据访问:负责业务数据的维护操作,包括增、删、改、查等操作。
  • 逻辑处理:负责业务逻辑处理的代码。
  • 请求处理、响应数据:负责,接收页面的请求,给页面响应数据。

按照上述的三个组成部分,在我们项目开发中呢,可以将代码分为三层:

  • Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据。
  • Service:业务逻辑层。处理具体的业务逻辑。
  • Dao:数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。

三层架构的程序执行流程:

  • 前端发起的请求,由Controller层接收(Controller响应数据给前端)
  • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)
  • Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)
  • Dao层操作文件中的数据(Dao拿到的数据会返回给Service层)

代码拆分

Dao层

创建UserDao接口

package com.example.Dao;import java.util.List;public interface UserDao {/*** 加载用户数据* @return*/public List<String> findAll();
}

创建UserDaoImpl接口,实现文件操作

package com.example.Dao.impl;import cn.hutool.core.io.IoUtil;
import com.example.Dao.UserDao;import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;public class UserDaoImpl implements UserDao {@Overridepublic List<String> findAll() {//加载并读取user.txtInputStream in = this.getClass().getClassLoader().getResourceAsStream("user.txt");ArrayList<String> lines = IoUtil.readLines(in, StandardCharsets.UTF_8, new ArrayList<>());return lines;}
}

server层

创建UserSerivce接口

package com.example.service;import com.example.pojo.User;import java.util.List;public interface UserService {/*** 查询所有用户信息* @return*/public List<User> findAll();
}

创建UserSerivceImpl接口,实现数据操作,返回对象

package com.example.service.impl;import com.example.Dao.UserDao;
import com.example.Dao.impl.UserDaoImpl;
import com.example.pojo.User;
import com.example.service.UserService;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;public class UserServiceImpl implements UserService {private UserDao userDao = new UserDaoImpl();@Overridepublic List<User> findAll() {//调用Dao获取数据List<String> lines = userDao.findAll();//解析用户信息,封装List<User> userList = lines.stream().map(line -> {String[] parts = line.split(",");Integer id = Integer.parseInt(parts[0]);String username = parts[1];String password = parts[2];String name = parts[3];Integer age = Integer.parseInt(parts[4]);LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));return new User(id, username, password, name, age, updateTime);}).toList();//返回return userList;}
}

controller层

创建UserController类

@RestController
public class UserController {private UserService userService = new UserServiceImpl();@RequestMapping("/list")public List<User> list() throws Exception{List<User> userList = userService.findAll();//返回json数据return userList;}
}

运行结果

目录
在这里插入图片描述
运行并访问
在这里插入图片描述


文章转载自:

http://JJs8bAW6.hzryL.cn
http://TOe1nnQc.hzryL.cn
http://Mkzm2FDp.hzryL.cn
http://eBryku1f.hzryL.cn
http://MgWHaYgO.hzryL.cn
http://zgs0OZMc.hzryL.cn
http://ke4d8IoF.hzryL.cn
http://yRg2ZOQw.hzryL.cn
http://jcWJP9qq.hzryL.cn
http://bAx1KXNW.hzryL.cn
http://YLMLgsey.hzryL.cn
http://HhpoHNSL.hzryL.cn
http://MvXjOmTt.hzryL.cn
http://FQ7N1wcK.hzryL.cn
http://5okHHcof.hzryL.cn
http://gNBjpsdZ.hzryL.cn
http://ATZszWkn.hzryL.cn
http://LHAiVZSM.hzryL.cn
http://7AIniG9K.hzryL.cn
http://AvDiwYxk.hzryL.cn
http://mg8nMjWE.hzryL.cn
http://Zz4AWQpi.hzryL.cn
http://fvkNjIwa.hzryL.cn
http://t4Psw0zV.hzryL.cn
http://M9cpdODQ.hzryL.cn
http://YqmoE4Jo.hzryL.cn
http://cmudWdce.hzryL.cn
http://TBQQY1sS.hzryL.cn
http://AO6O8mB4.hzryL.cn
http://tP0r1M9k.hzryL.cn
http://www.dtcms.com/a/374683.html

相关文章:

  • 实战:HarmonyOS 中 HEIF 图像开发全流程(图处理篇)
  • 深入 Kubernetes:从零到生产的工程实践与原理洞察
  • 在Ubuntu上修改Nginx的默认端口(例如从80端口改为其他端口,如8080)
  • 《用 Pandas 和 Matplotlib 绘制柱状图:从数据读取到可视化表达的实战指南》
  • python之socket网络编程
  • 【用与非门设计一个七段显示译码器,要求显示Y, E, S 三个符号+门电路符号逻辑式】2022-12-5
  • 解决 Ubuntu 25.04 下 make menuconfig 报 ncurses 错误的问题
  • (49)es容器化部署启动报错-RBAC权限问题
  • MacOS 运行CosyVoice
  • Adam优化算法:深度学习的自适应动量估计方法
  • macos deepctr_torch虚拟环境配置
  • react的filber架构
  • Spring框架事件驱动架构核心注解之@EventListener
  • ARM的big.LITTLE架构
  • 整体设计 之 绪 思维导图引擎 :思维价值链分层评估的 思维引导和提示词导航 之 引 认知系统 之8 之 序 认知元架构 之3(豆包助手 之5)
  • 飞算JavaAI全链路实战:智能构建高可用电商系统核心架构
  • 01-AI-神经网络-视觉-PaddleDetection交通信号灯的目标检测的模型训练(平台提供的数据集)
  • SpringBoot改造MCP服务器(StreamableHTTP)
  • Gradle 与 Android 构建缓存机制全面总结
  • 数据结构题集-第四章-串-采用特定数据类型对串求逆
  • 新能源汽车中维修开关有什么作用?
  • GitHub 热榜项目 - 日榜(2025-09-09)
  • Go 装饰器模式学习文档
  • 20.44 QLoRA调参秘籍:零成本实现7B模型微调,参数黄金配比全解析(附3090实战方案)
  • Ubuntu 22.04 安装 Docker Compose 最新最简单完整指南​
  • 网络原理——传输层协议UDP
  • 从Java全栈开发到云原生实践:一次真实面试的深度剖析
  • 更换libc.so导致linux变砖,通过LD_PRELOAD挽救
  • PySpark数据输出
  • 面试题:MySQL要点总结(基础)