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

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

三层架构

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";

    @Override
    public 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;
    }

    @Override
    public 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");
        }
    }
}
相关推荐
前端_学习之路2 小时前
React--Fiber 架构
前端·react.js·架构
怀揣小梦想6 小时前
微服务项目远程调用时的负载均衡是如何实现的?
微服务·架构·负载均衡
GateWorld6 小时前
RISC-V:开源芯浪潮下的技术突围与职业新赛道 (二) RISC-V架构深度解剖(上)
架构·risc-v·指令集精简·寄存器设计·特权架构·模块化扩展
MARS_AI_8 小时前
大语言模型驱动智能语音应答:技术演进与架构革新
人工智能·语言模型·自然语言处理·架构·信息与通信
mCell8 小时前
为什么我们需要 `.proto` 文件
后端·微服务·架构
张先shen10 小时前
Elasticsearch RESTful API入门:索引的增删改查完全指南
java·大数据·elasticsearch·搜索引擎·架构·全文检索·restful
木叶丸11 小时前
AI三大核心概念通俗指南:AIGC、Agent、MCP
人工智能·flutter·架构
CodeWithMe12 小时前
【Note】Linux Kernel 之 内核架构、源码文件、API/ABI 、FHS
linux·运维·架构
谢娘蓝桥12 小时前
[Xmos] Xmos架构
开发语言·架构·xmos