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");
        }
    }
}
相关推荐
Java烘焙师1 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
掘金-我是哪吒1 小时前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
掘金-我是哪吒1 小时前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
DemonAvenger2 小时前
TCP连接池设计与实现:提升Go应用网络性能
网络协议·架构·go
森焱森8 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
强哥之神14 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
DemonAvenger14 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
Code季风15 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
小马哥编程15 小时前
【iSAQB软件架构】架构决策记录-ADR
数据库·架构·系统架构·设计规范
木鱼时刻15 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes