Cấu trúc MVC: So sánh Model 1 và Model 2




Trước khi phát triển các ứng dụng web, bạn cần có ý tưởng về các mô hình (Model) thiết kế. Có hai kiểu mô hình lập trình là Cấu trúc Model 1 và Cấu trúc Model 2 (hay còn gọi là MVC). Phần dưới đây mình xin giới thiệu và so sánh sơ qua về hai cấu trúc này:

Cấu trúc Model 1

Servlet và JSP là các công nghệ chính để phát triển các ứng dụng web.

Công nghệ Servlet không tạo tiến trình, thay vào đó nó tạo Thread để xử lý yêu cầu. Lợi thế của việc tạo Thread là nó không cấp phát khu vực bộ nhớ riêng rẽ. Do đó, nhiều yêu cầu liên tiếp nhau có thể dễ dàng được xử lý bởi Servlet. Vấn đề chính xảy ra với Servlet là nó cần tái biên dịch nếu có bất cứ code nào được sửa đổi. Để tham khảo về Servlet, mời bạn theo dõi loạt bài Hướng dẫn về Servlet.

JSP xử lý hầu hết các vấn đề của Servlet. Bạn không cần tái triển khai ứng dụng nếu JSP page được sửa đổi. JSP cung cấp hỗ trợ để phát triển các ứng dụng web sử dụng JavaBean, thẻ tùy biến Custom Tag và JSTL để bạn có thể đặt tính logic riêng với JSP, do đó việc test và debug trở nên dễ dàng hơn. Để tham khảo về JSP, mời bạn theo dõi loạt bài Hướng dẫn về JSP.

Lợi thế và hạn chế của Cấu trúc Model 1

Lợi thế: Dễ dàng và nhanh chóng để phát triển các ứng dụng web.

Hạn chế:

  • Việc điều khiển điều hướng là không tập trung khi mỗi page có trình logic riêng để xác định page tiếp theo. Nếu tên JSP page bị thay đổi mà được tham chiếu bởi trang khác, thì chúng ta cũng phải thay đổi tên đó trong các trang tham chiếu.

  • Tiêu tốn thời gian. Bạn cần dành nhiều thời gian hơn để phát triển các thẻ tùy biến Custom Tag trong JSP.

  • Khó khăn để kế thừa. Nó thực sự tốt với các ứng dụng nhỏ nhưng với các ứng dụng lớn thì chưa hẳn.

Cấu trúc Model 2 (MVC)

Model 2 là dựa trên mẫu thiết kế MVC (Model View Controller). MVC bao gồm ba phần chính là model, view và controller.

Model: Biểu diễn trạng thái (dữ liệu), và là tầng thấp nhất trong mẫu. Nó phản hồi yêu cầu từ view và nó cũng phản hồi các chỉ thị từ controller để cập nhật chính nó.

View: Chịu trách nhiệm hiển thị dữ liệu trong một định dạng cụ thể.

Controller: Hoạt động như một giao diện Interface giữa View và Model. Nó chặn và chiu trách nhiệm phản hồi tất cả các yêu cầu (nhận input và lệnh) tới Model/View để thực hiện các tương tác tương ứng. Controller nhận input, nó thực hiện việc validate và sau đó thực hiện các hoạt động mà sửa đổi trạng thái của Model.

Lợi thế và hạn chế của Model 2 (MVC)

Lợi thế:

  • Điều khiển điều hướng là tập trung. Bây giờ chỉ có Controller chứa trình logic để quyết định page tiếp theo.

  • Dễ dàng để duy trì, kế thừa, và test.

Hạn chế: Chúng ta cần viết code cho chính Controller. Nếu chúng ta thay đổi code của Controller, chúng ta cần tái biên dịch (biên dịch lại) lớp đó và tái triển khai ứng dụng.

Giải pháp cho Cấu trúc Model 2 trong Struts 2: Các thành phần MVC có thể cấu hình

Struts 2 sử dụng phương pháp mang tính khai báo để định nghĩa các thành phần view, ánh xạ các yêu cầu, … Struts 2 giải quyết vấn đề của cấu trúc Model 2. Trong Struts 2, bạn định nghĩa tất cả các lớp Action và các thành phần view trong struts.xml file.