Trước tiên, chúng ta hãy cùng cafedev giới thiệu mọi thứ về MVC Design Pattern và phần code ví dụ chi tiết nhằm giúp ace dễ hiểu khi áp dụng trên các ngôn ngữ khác nhau. Ace có thể tham khảo thêm các bài khác tại series Design Pattern tại đây.

Các Model View Controller (MVC) quy định cụ thể mẫu thiết kế mà một ứng dụng bao gồm một mô hình dữ liệu, thông tin trình bày, và thông tin điều khiển. Mô hình yêu cầu mỗi cái này phải được tách thành các đối tượng khác nhau.

MVC là một mô hình kiến ​​trúc, nhưng không phải là ứng dụng hoàn chỉnh. MVC chủ yếu liên quan đến giao diện người dùng / lớp tương tác của một ứng dụng. Bạn vẫn sẽ cần lớp logic nghiệp vụ, có thể là một số lớp dịch vụ và lớp truy cập dữ liệu.

Sơ đồ UML Mẫu thiết kế MVC

1.Thành phần thiết kế

  • Các Model chỉ chứa dữ liệu ứng dụng thuần túy, nó chứa không có logic mô tả làm thế nào để trình bày dữ liệu cho người dùng.
  • Các View trình bày dữ liệu của mô hình cho người dùng. Chế độ xem biết cách truy cập dữ liệu của mô hình, nhưng nó không biết dữ liệu này có nghĩa là gì hoặc người dùng có thể làm gì để thao tác với nó.
  • Bộ Controller tồn tại giữa khung nhìn và mô hình. Nó lắng nghe các sự kiện được kích hoạt bởi khung nhìn (hoặc một nguồn bên ngoài khác) và thực hiện phản ứng thích hợp với những sự kiện này. Trong hầu hết các trường hợp, phản ứng là gọi một phương thức trên mô hình. Vì chế độ xem và mô hình được kết nối thông qua cơ chế thông báo, kết quả của hành động này sau đó sẽ tự động được phản ánh trong chế độ xem.

Hãy xem một ví dụ về Mẫu thiết kế MVC.

class Student 
{ 
	private String rollNo; 
	private String name; 
	
	public String getRollNo() 
	{ 
		return rollNo; 
	} 
	
	public void setRollNo(String rollNo) 
	{ 
		this.rollNo = rollNo; 
	} 
	
	public String getName() 
	{ 
		return name; 
	} 
	
	public void setName(String name) 
	{ 
		this.name = name; 
	} 
} 

class StudentView 
{ 
	public void printStudentDetails(String studentName, String studentRollNo) 
	{ 
		System.out.println("Student: "); 
		System.out.println("Name: " + studentName); 
		System.out.println("Roll No: " + studentRollNo); 
	} 
} 

class StudentController 
{ 
	private Student model; 
	private StudentView view; 

	public StudentController(Student model, StudentView view) 
	{ 
		this.model = model; 
		this.view = view; 
	} 

	public void setStudentName(String name) 
	{ 
		model.setName(name);		 
	} 

	public String getStudentName() 
	{ 
		return model.getName();		 
	} 

	public void setStudentRollNo(String rollNo) 
	{ 
		model.setRollNo(rollNo);		 
	} 

	public String getStudentRollNo() 
	{ 
		return model.getRollNo();		 
	} 

	public void updateView() 
	{				 
		view.printStudentDetails(model.getName(), model.getRollNo()); 
	}	 
} 

class MVCPattern 
{ 
	public static void main(String[] args) 
	{ 
		Student model = retriveStudentFromDatabase(); 

		StudentView view = new StudentView(); 

		StudentController controller = new StudentController(model, view); 

		controller.updateView(); 

		controller.setStudentName("Vikram Sharma"); 

		controller.updateView(); 
	} 

	private static Student retriveStudentFromDatabase() 
	{ 
		Student student = new Student(); 
		student.setName("Lokesh Sharma"); 
		student.setRollNo("15UCS157"); 
		return student; 
	} 
	
} 

Đầu ra:

Student: 
Name: Lokesh Sharma
Roll No: 15UCS157
Student: 
Name: Vikram Sharma
Roll No: 15UCS157

2. Ưu điểm

  • Nhiều nhà phát triển có thể làm việc đồng thời trên model, controller và các views.
  • MVC cho phép nhóm hợp lý các hành động liên quan trên một bộ controller với nhau. Các views cho một mô hình cụ thể cũng được nhóm lại với nhau.
  • Models có thể có nhiều views.

3. Nhược điểm

  • Điều hướng khung có thể phức tạp vì nó giới thiệu các lớp trừu tượng mới và yêu cầu người dùng thích ứng với các tiêu chí phân tách của MVC.
  • Kiến thức về nhiều công nghệ trở thành tiêu chuẩn. Các nhà phát triển sử dụng MVC cần phải có kỹ năng trong nhiều công nghệ.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!