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