MVC (Model-View-Controller) là một kiến trúc phần mềm được sử dụng để tách riêng các thành phần của một ứng dụng, bao gồm:
- Model: là thành phần quản lý dữ liệu và logic của ứng dụng. Nó làm việc với cơ sở dữ liệu và cung cấp dữ liệu cho View.
- View: là thành phần giao diện người dùng, hiển thị dữ liệu cho người dùng và nhận các thao tác từ người dùng.
- Controller: là thành phần điều khiển, nó nhận các yêu cầu từ View và xử lý chúng bằng cách gọi các phương thức trong Model. Nó cũng cung cấp các hành động cho View để cập nhật dữ liệu.
MVC giúp tách riêng các thành phần của ứng dụng và giúp cho việc phát triển, bảo trì và bảo mật trở nên dễ dàng hơn. Nó cũng cho phép người dùng thay đổi giao diện mà không cần thay đổi logic hoặc dữ liệu của ứng dụng.
Các bài viết liên quan:
Trong Java, có nhiều framework hỗ trợ việc sử dụng MVC như Spring MVC, JavaServer Faces (JSF), Struts và nhiều framework khác.
Ví dụ về mô hình mvc trong java
Ví dụ sau minh họa mô hình MVC trong một ứng dụng quản lý sinh viên:
- Model: lớp Student quản lý thông tin về sinh viên, bao gồm tên, tuổi, địa chỉ và lớp học. Nó cũng có các phương thức để thêm, xóa và sửa sinh viên trong cơ sở dữ liệu.
- View: lớp StudentView hiển thị thông tin sinh viên và nhận các yêu cầu từ người dùng, ví dụ như thêm, xóa và sửa sinh viên.
- Controller: lớp StudentController nhận các yêu cầu từ StudentView và gọi các phương thức trong Student để thực hiện các thao tác với cơ sở dữ liệu. Nó cũng cập nhật dữ liệu trong StudentView sau khi thực hiện thao tác.
Source code mô hình MVC trong một ứng dụng quản lý sinh viên
Để minh họa mô hình MVC trong một ứng dụng quản lý sinh viên, tôi sẽ viết mã cho các lớp Model, View và Controller. Tuy nhiên, do giới hạn của tôi là một model ngôn ngữ học máy, tôi sẽ chỉ viết mã cho các phương thức chính của chúng. Bạn có thể tùy chỉnh và mở rộng theo nhu cầu của mình.
Model (Student.java)
import java.util.ArrayList; import java.util.List; public class Student { private String name; private int age; private String address; private String className; private static List<Student> students = new ArrayList<>(); public Student(String name, int age, String address, String className) { this.name = name; this.age = age; this.address = address; this.className = className; students.add(this); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getClassName() { return className; } public void setClassName(String className) { this.className = className; } public static List<Student> getAllStudents() { return students; } public static void addStudent(Student student) { students.add(student); } public static void deleteStudent(Student student) { students.remove(student); } public static void updateStudent(Student student) { for (Student s : students) { if (s.getName().equals(student.getName())) { s.setAge(student.getAge()); s.setAddress(student.getAddress()); s.setClassName(student.getClassName()); } } }
View (StudentView.java)
import java.util.Scanner; public class StudentView { private static Scanner scanner = new Scanner(System.in); public static void showAllStudents() { for (Student student : Student.getAllStudents()) { System.out.println("Name: " + student.getName() + ", Age: " + student.getAge() + ", Address: " + student.getAddress() + ", Class: " + student.getClassName()); } } public static Student getNewStudentDetails() { System.out.print("Enter student name: "); String name = scanner.nextLine(); System.out.print("Enter student age: "); int age = scanner.nextInt(); scanner.nextLine(); System.out.print("Enter student address: "); String address = scanner.nextLine(); System.out.print("Enter student class: "); String className = scanner.nextLine(); return new Student(name, age, address, className); } public static String getStudentName() { System.out.print("Enter student name: "); return scanner.nextLine(); } }
Controller (StudentController.java)
public class StudentController { public static void addNewStudent() { Student student = StudentView.getNewStudentDetails(); Student.addStudent(student); } public static void updateStudent() { String studentName = StudentView.getStudentName(); Student student = Student.getAllStudents().stream() .filter(s -> s.getName().equals(studentName)).findFirst().orElse(null); if (student != null) { System.out.print("Enter new age: "); student.setAge(StudentView.scanner.nextInt()); StudentView.scanner.nextLine(); System.out.print("Enter new address: "); student.setAddress(StudentView.scanner.nextLine()); System.out.print("Enter new class: "); student.setClassName(StudentView.scanner.nextLine()); Student.updateStudent(student); } else { System.out.println("Student not found."); } } public static void deleteStudent() { String studentName = StudentView.getStudentName(); Student student = Student.getAllStudents().stream() .filter(s -> s.getName().equals(studentName)).findFirst().orElse(null); if (student != null) { Student.deleteStudent(student); } else { System.out.println("Student not found."); } } }
Trong ví dụ trên, Student là Model, StudentView là View và StudentController là Controller. Mỗi lớp chịu trách nhiệm cho một phần cụ thể của ứng dụng, và chúng tương tác với nhau để thực hiện các chức năng quản lý sinh viên. Ví dụ trên chỉ là một ví dụ đơn giản về cách sử dụng mô hình MVC trong Java, và có thể mở rộng và tùy chỉnh theo nhu cầu của ứng dụng cụ thể của bạn.
Ngoài ra, trong thực tế, có rất nhiều framework hỗ trợ việc sử dụng MVC, như Spring MVC, JavaServer Faces (JSF), Struts và nhiều framework khác. Chúng giúp bạn viết mã tối ưu hơn và tiết kiệm thời gian trong việc phát triển các ứng dụng MVC.