5.1 KiB
5.1 KiB
本次实验的主要任务是完成期末案例的业务逻辑层(Service Layer)开发。业务逻辑层是连接图形界面(GUI)和数据访问层(DAO)的桥梁,它包含了所有的业务规则和流程控制。
任务一:完成DAOFactory
在开始service层开发之前,我们需要先完成DAOFactory
类。这个类使用了单例模式和工厂模式,用于统一管理和获取DAO层的实例。
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
类的主要特点:
- 使用私有构造函数防止外部实例化
- 使用静态字段保存DAO实例,确保全局唯一
- 提供静态方法获取DAO实例
后期你可以这样使用它来获取DAO实例:
// 获取StudentDAO实例
StudentDAO studentDAO = DAOFactory.getStudentDAO();
// 获取TeacherDAO实例
TeacherDAO teacherDAO = DAOFactory.getTeacherDAO();
// 获取LeaveRequestDAO实例
LeaveRequestDAO leaveRequestDAO = DAOFactory.getLeaveRequestDAO();
任务二:开发Service层类
在src/service
目录下创建以下服务类:
2.1 学生服务类(StudentService.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)
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)
任务三:创建Service工厂类
为了方便获取Service实例,创建一个ServiceFactory类:
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
目录下创建对应的测试类:
- StudentServiceTest.java - 测试学生登录功能
- TeacherServiceTest.java - 测试教师登录功能
- LeaveRequestServiceTest.java - 测试请假申请和审批功能