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