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");
        }
    }
}
相关推荐
TechStack 创行者5 小时前
Docker+Flask 实战:打造高并发微服务架构
运维·docker·微服务·容器·架构
Aska_Lv6 小时前
mybatis+springboot+MySQL批量插入 1w 条数据——探讨
后端·架构
桂月二二7 小时前
云原生Serverless平台:无服务器计算的架构革命
云原生·架构·serverless
Wgllss7 小时前
金三银四,分享N年前准备的面试真经,可能适用绝大部分人
android·架构·android jetpack
易元8 小时前
设计模式-组合模式
后端·架构
王嘉俊9258 小时前
OpenHarmony体系架构深度解析
架构·arkts·鸿蒙·鸿蒙系统·openharmony
绿算技术9 小时前
DPU的架构:模块化与可扩展性
科技·算法·缓存·架构
前端旅人_cs9 小时前
VITE + 邦联模块(module federation)实现
架构·前端框架
桂月二二10 小时前
云原生容器编排:Kubernetes的架构演进与实践
云原生·架构·kubernetes
李豆豆喵10 小时前
第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作
sql·mysql·架构