Nói mãi rồi cũng chán!

MVC pattern được sử dụng rất rộng rãi cho cả các ứng dụng client và webserver, mỗi một nơi sẽ có cách thiết kế vài cài đặt khác nhau cho pattern này, trong bài viết này mình sẽ chỉ nói đến 1 MVC pattern được dùng phổ biến cho Web thôi nhé.

Chắc hẳn mọi người đã quá quá (2 chữ quá nhé) quen thuộc hoặc quá quá nhiều lần được nghe đến từ trường học, cho đến công ty, từ bạn bè cho đến các trang web. Nhưng dù sao cũng nên nhắc lại một chút nhỉ.

Nhắc lại MVC

MVC là viết tắt của 3 từ Model, View, Controller thực ra viết thế này cho nó đẹp với cảm giác xuôi xuôi thôi chứ nó gây nhầm lẫn khó hiểu ghê gớm, làm mình ngày xưa mãi mới hiểu được, lẽ ra phải viết là VCM mới đúng, vì sao vậy? Hãy đứng từ xa nhìn vào đường đi của 1 login request nhé.

  1. Đầu tiên, người dùng phải click vào nút login để gửi yêu cầu login: rõ ràng là cái nút này nó thuộc cái view mà, chỗ này ngày xưa cãi nhau to, có người bảo mình là cái nút đấy chính là cái controller, có người bảo bản chất của việc click cái nút là gọi đến hàm onClick, cái hàm onClick đó chính là controller, bla bla. Nhưng mình thì mình chỉ hiểu đơn giản nó là việc người dùng tương tác với View
  2. Client sẽ gói dữ liệu thành 1 request và đối tượng đầu tiên nhận được đó chính là Controller mà chúng ta hay dùng Spring để code
  3. Dữ liệu từ tầng controller sẽ được chuyển đồi và truyền xuống cho tầng model, tầng model sẽ xử lý logic login và trả lại kết quả cho tầng controller. Cái tầng model này gây nhầm lẫn cũng không kém, có nhiều anh em trong đó có mình đặt cái package tên là model mà trong cái package đấy toàn chưa đối tượng data (đối tượng chỉ lưu dữ liệu, không xử lý logic gì cả) sau rồi đến lúc có các bạn thực tập vào lại gây hiểu nhầm cho các bạn ấy (cái package model đó chính là tầng model).
  4. Tầng controller chuyển đổi dữ liệu cho phù hợp và gọi đến view, set dữ liệu dữ liệu vào view
  5. View sẽ sử dụng dữ liệu nhận được để hiển thị (render ra html trả cho browser để browser hiển thị) ra cho người dùng

Hơi dài dòng và cần tóm gọn lại 1 chút:

  • View: là cái mà người dùng sẽ nhìn thấy và tương tác Controller: là tầng chứa các đối tượng sẽ hứng request từ client gửi lên
  • Model: là tầng xử lý logic tương ứng với request nhận được. Model bao gồm các lớp service, repository (truy xuất dữ liệu), … đại loại là các lớp phía dưới Controller

Về data flow, mọi người xem ở hình phía trên nhé.

Sẽ dần bị thay thế

Với sự ra đời và phát triển mạnh mẽ của SPA (Single Page Application) thì việc lập trình với tầng view (JSP, JSF, Velocity, Themeleaf, Freemaker) cũng sẽ dần bị thay thế với Restful API, và có lẽ chúng ta cũng sẽ không goi là webserver nữa mà sẽ gọi là API server. Chính vì vậy mà mô hình MVC cũng sẽ chỉ còn lại MC mà thôi. Tuy nhiên việc có bị thay thế hoàn toàn hay không thì có lẽ là không, bởi vì hiện tại các framework như wordpress, liferay, ezyplatform vẫn đang support cho MVC rất mạnh và hiệu quả, vậy nên tuỳ vào loại hình dự án và ngân sách mà chúng ta lựa chọn sao cho phù hợp.

Tổng kết lại

Theo quan điểm của mình, các bạn không cần bỏ nhiều thời gian vào nghiên cứu MVC vì hiện tại các framework đã hỗ trợ rất tốt phần này rồi, trong quá trình sử dụng chúng ta cũng sẽ tự hiểu được cơ chế hoạt động của MVC tương ứng với các framework này. Và không nhất thiết phải cố áp dụng nó vào dự án của mình làm gì vì bạn hoàn toàn có thể sử dụng SPA và gọi APIs nếu muốn.