学生管理系统的Controller
层主要负责处理用户输入,将其转换为对模型的操作,并更新视图。它作为模型和视图之间的桥梁,协调两者之间的交互。具体来说,Controller
的作用包括:
- 接收用户输入(如从视图层传递过来的请求)。
- 调用模型层(如DAO)的方法来处理业务逻辑。
- 更新视图层以反映模型层的变化。
项目结构
为了更清晰,我们的项目结构如下:
student_management
│
├── src
│ ├── model
│ │ ├── Student.java
│ │ └── StudentDAO.java
│ │
│ ├── view
│ │ └── StudentView.java
│ │
│ ├── controller
│ │ └── StudentController.java
│ │
│ └── util
│ └── DBUtil.java
│
└── resources└── database.properties
创建StudentController类
StudentController
类负责处理用户请求,并调用StudentDAO
来执行相应的操作,然后更新视图。
package controller;import model.Student;
import model.StudentDAO;
import view.StudentView;import java.util.List;/*** 学生控制器类,负责处理用户请求,调用模型并更新视图*/
public class StudentController {private StudentDAO studentDAO;private StudentView studentView;public StudentController(StudentDAO studentDAO, StudentView studentView) {this.studentDAO = studentDAO;this.studentView = studentView;}/*** 处理添加学生请求* @param student 学生对象*/public void addStudent(Student student) {boolean isAdded = studentDAO.addStudent(student);if (isAdded) {studentView.displaySuccessMessage("Student added successfully!");} else {studentView.displayErrorMessage("Failed to add student.");}}/*** 处理更新学生请求* @param student 学生对象*/public void updateStudent(Student student) {boolean isUpdated = studentDAO.updateStudent(student);if (isUpdated) {studentView.displaySuccessMessage("Student updated successfully!");} else {studentView.displayErrorMessage("Failed to update student.");}}/*** 处理删除学生请求* @param studentId 学生ID*/public void deleteStudent(int studentId) {boolean isDeleted = studentDAO.deleteStudent(studentId);if (isDeleted) {studentView.displaySuccessMessage("Student deleted successfully!");} else {studentView.displayErrorMessage("Failed to delete student.");}}/*** 处理获取所有学生请求*/public void getAllStudents() {List<Student> students = studentDAO.getAllStudents();studentView.displayStudentList(students);}/*** 处理根据ID获取学生请求* @param studentId 学生ID*/public void getStudentById(int studentId) {Student student = studentDAO.getStudentById(studentId);if (student != null) {studentView.displayStudentDetails(student);} else {studentView.displayErrorMessage("Student not found.");}}
}
相关视图类(StudentView)
为了完整性,我们还需要一个视图类StudentView
,用于展示信息给用户。
package view;import model.Student;import java.util.List;/*** 学生视图类,负责展示学生信息*/
public class StudentView {/*** 显示成功信息* @param message 成功信息*/public void displaySuccessMessage(String message) {System.out.println("SUCCESS: " + message);}/*** 显示错误信息* @param message 错误信息*/public void displayErrorMessage(String message) {System.err.println("ERROR: " + message);}/*** 显示学生详细信息* @param student 学生对象*/public void displayStudentDetails(Student student) {System.out.println("Student Details: ");System.out.println("ID: " + student.getId());System.out.println("Name: " + student.getName());System.out.println("Age: " + student.getAge());System.out.println("Grade: " + student.getGrade());}/*** 显示学生列表* @param students 学生列表*/public void displayStudentList(List<Student> students) {System.out.println("Student List: ");for (Student student : students) {System.out.println("ID: " + student.getId() + ", Name: " + student.getName() +", Age: " + student.getAge() + ", Grade: " + student.getGrade());}}
}
代码详解与设计原因
StudentController类
- 作用:处理用户请求,调用模型层(StudentDAO)的方法来执行具体的操作,并更新视图层(StudentView)。
- 方法:
addStudent
:处理添加学生请求,调用StudentDAO
的addStudent
方法,并更新视图。updateStudent
:处理更新学生请求,调用StudentDAO
的updateStudent
方法,并更新视图。deleteStudent
:处理删除学生请求,调用StudentDAO
的deleteStudent
方法,并更新视图。getAllStudents
:处理获取所有学生请求,调用StudentDAO
的getAllStudents
方法,并更新视图。getStudentById
:处理根据ID获取学生请求,调用StudentDAO
的getStudentById
方法,并更新视图。
StudentView类
- 作用:负责展示学生信息给用户,包括成功信息、错误信息、学生详细信息和学生列表。
Controller设计原因
- 分离关注点:将控制逻辑从视图和模型中分离出来,使代码更清晰、更易于维护。
- 协调模型和视图:Controller负责协调模型和视图之间的交互,确保用户输入得到正确处理并显示相应的结果。
- 提高可维护性:通过将控制逻辑集中在Controller中,可以更容易地对其进行修改和扩展,而不会影响视图和模型。
- 统一管理:将所有用户请求的处理逻辑集中在Controller中,便于统一管理和调试。
通过以上设计,我们实现了一个完整的学生管理系统的Controller层,使得系统具有良好的结构和可维护性。