From 7a6eda7e7479fc951e55e6df4da40cd6307c0211 Mon Sep 17 00:00:00 2001 From: seahi Date: Tue, 24 Dec 2024 09:45:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Day5=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/day5.md | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/doc/day5.md b/doc/day5.md index e69de29..d415fb7 100644 --- a/doc/day5.md +++ b/doc/day5.md @@ -0,0 +1,192 @@ +本次实验的主要任务是完成期末案例的**业务逻辑层**(Service Layer)开发。业务逻辑层是连接图形界面(GUI)和数据访问层(DAO)的桥梁,它包含了所有的业务规则和流程控制。 + +## 任务一:完成DAOFactory + +在开始service层开发之前,我们需要先完成`DAOFactory`类。这个类使用了单例模式和工厂模式,用于统一管理和获取DAO层的实例。 + +```java +package dao; + +import dao.impl.StudentDAOImpl; +import dao.impl.TeacherDAOImpl; +import dao.impl.LeaveRequestDAOImpl; + +/** + * DAO工厂类,用于获取各种DAO的实例 + */ +public class DAOFactory { + private static final StudentDAO studentDAO = new StudentDAOImpl(); + private static final TeacherDAO teacherDAO = new TeacherDAOImpl(); + private static final LeaveRequestDAO leaveRequestDAO = new LeaveRequestDAOImpl(); + + /** + * 私有构造函数,防止实例化 + */ + private DAOFactory() { + // 私有构造函数,阻止实例化 + } + + /** + * 获取StudentDAO实例 + * @return StudentDAO实例 + */ + public static StudentDAO getStudentDAO() { + return studentDAO; + } + + /** + * 获取TeacherDAO实例 + * @return TeacherDAO实例 + */ + public static TeacherDAO getTeacherDAO() { + return teacherDAO; + } + + /** + * 获取LeaveRequestDAO实例 + * @return LeaveRequestDAO实例 + */ + public static LeaveRequestDAO getLeaveRequestDAO() { + return leaveRequestDAO; + } +} +``` + +`DAOFactory`类的主要特点: +1. 使用私有构造函数防止外部实例化 +2. 使用静态字段保存DAO实例,确保全局唯一 +3. 提供静态方法获取DAO实例 + +后期你可以这样使用它来获取DAO实例: + +```java +// 获取StudentDAO实例 +StudentDAO studentDAO = DAOFactory.getStudentDAO(); + +// 获取TeacherDAO实例 +TeacherDAO teacherDAO = DAOFactory.getTeacherDAO(); + +// 获取LeaveRequestDAO实例 +LeaveRequestDAO leaveRequestDAO = DAOFactory.getLeaveRequestDAO(); +``` + +## 任务二:开发Service层类 + +在`src/service`目录下创建以下服务类: + +### 2.1 学生服务类(StudentService.java) + +```java +package service; + +import dao.DAOFactory; +import dao.StudentDAO; +import model.Student; + +/** + * 学生信息服务类 + */ +public class StudentService { + private final StudentDAO studentDAO = DAOFactory.getStudentDAO(); + + /** + * 根据ID查询学生 + * @param id 学生ID + * @return 学生信息 + */ + public Student getStudentById(int id) { + return studentDAO.findById(id); + } + + /** + * 学生登录 + * @param studentId 学号 + * @param password 密码 + * @return 登录成功返回学生信息,失败返回null + */ + public Student login(String studentId, String password) { + Student student = studentDAO.findByStudentId(studentId); + if (student != null && password.equals(student.getPassword())) { + return student; + } + return null; + } +} +``` + +### 2.2 教师服务类(TeacherService.java) + +```java +package service; + +import dao.DAOFactory; +import dao.TeacherDAO; +import model.Teacher; + +/** + * 教师信息服务类 + */ +public class TeacherService { + private final TeacherDAO teacherDAO = DAOFactory.getTeacherDAO(); + + /** + * 教师登录 + * @param teacherId 教师工号 + * @param password 密码 + * @return 登录成功返回教师信息,失败返回null + */ + public Teacher login(String teacherId, String password) { + Teacher teacher = teacherDAO.findByTeacherId(teacherId); + if (teacher != null && password.equals(teacher.getPassword())) { + return teacher; + } + return null; + } +} +``` + +### 2.3 请假服务类(LeaveRequestService.java) + +[LeaveRequestService.java](https://static.seahi.me/2024/12/LeaveRequestService.java) + +## 任务三:创建Service工厂类 + +为了方便获取Service实例,创建一个ServiceFactory类: + +```java +package service; + +/** + * Service工厂类,用于获取各种Service的实例 + */ +public class ServiceFactory { + private static final StudentService studentService = new StudentService(); + private static final TeacherService teacherService = new TeacherService(); + private static final LeaveRequestService leaveRequestService = new LeaveRequestService(); + + private ServiceFactory() { + // 私有构造函数,防止实例化 + } + + public static StudentService getStudentService() { + return studentService; + } + + public static TeacherService getTeacherService() { + return teacherService; + } + + public static LeaveRequestService getLeaveRequestService() { + return leaveRequestService; + } +} +``` + +## 任务四:单元测试 + +在`test/service`目录下创建对应的测试类: + +1. [StudentServiceTest.java](https://static.seahi.me/2024/12/StudentServiceTest.java) - 测试学生登录功能 +2. [TeacherServiceTest.java](https://static.seahi.me/2024/12/TeacherServiceTest.java) - 测试教师登录功能 +3. [LeaveRequestServiceTest.java](https://static.seahi.me/2024/12/LeaveRequestServiceTest.java) - 测试请假申请和审批功能 +