Các bạn cũng đã nghe nhiều về mô hình MVC phải không? Mình cũng vậy, nhưng thật sự mấy hôm nay khi tìm hiểu sâu về Spring MVC, mình mới phát hiện hóa ra bấy lâu nay mình đã có những chỗ hiểu sai về mô hình này. Vì thế, hôm nay mình xin viết bài này để giới thiệu với các bạn về mô hình MVC một cách dễ hiểu nhất.
Mô hình MVC nguyên thủy
Mô hình Model View Controller (MVC) được giới thiệu lần đầu tiên bởi Trygve Reenskaug khi anh ta đang làm việc trong dự án Smalltalk ở công ty Xerox PARC (một công ty ở California, Mỹ) trong những năm 1970. Ở thời điểm đó, mô hình này được áp dụng cho các ứng dụng desktop, các ứng dụng trên máy tính để bàn.
Mô hình MVC nguyên thủy phân chia các lớp trình bày ra thành các thành phần khác nhau. Mỗi thành phần sẽ đảm nhận một vai trò khác nhau.
- View sẽ sử dụng Model để hiển thị kết quả cho người dùng.
- Dựa vào hành động của người dùng, View sẽ kích hoạt Controller để xử lý thao tác của người dùng.
- Sau đó Controller sẽ cập nhập dữ liệu cho Model.
- Model lúc này sẽ thông báo cho View để hiển thị lại kết quả cho người dùng.
Các bạn có thể xem hình vẽ sau để hiểu rõ hơn:
Mô hình này hoạt động rất tốt với các ứng dụng desktop nhưng khi đem mô hình này áp dụng cho các ứng dụng web thì không khả thi do bản chất của giao thức HTTP trong các ứng dụng web.
Với một ứng dụng web thì người dùng thao tác với ứng dụng bằng cách gửi một request tới server chạy ứng dụng web đó. Ứng dụng web sẽ xử lý request này, cập nhập giao diện rồi mới gửi trả lại cho người dùng. Điều này có nghĩa chúng ta phải có một cách xử lý khác trong môi trường web, thay vì đẩy những thay đổi lên cho View, thì những thay đổi này sẽ được lấy về từ server.
Đó là lý do tại sao chúng ta phải có những thay đổi trong mô hình MVC cho môi trường web.
Mô hình MVC trong môi trường web
Để khắc phục khó khăn của mô hình MVC trong môi trường web, một Front Controller đã được giới thiệu. Nói nôm na, Front Controller sẽ là nơi đầu tiên tiếp nhận các request từ người dùng và nó cũng là nơi sẽ trả kết quả lại cho người dùng. Front controller sẽ điều hướng request tới các controllers phù hợp, các controllers này sẽ xử lý request, trả về model và chọn view sẽ sử dụng.
Các bạn hãy xem hình vẽ sau:
Trong Java, đa số các trường hợp, Front Controller là một đối tượng hiện thực interface javax.servlet.Servlet. Trong Spring MVC thì đối tượng đó chính là org.springframework.web.servlet.DispatcherServlet.