Mô hình MVC là gì? Giải thích dễ hiểu nhất qua ví dụ Nhà hàng

Mục lục

Nếu bạn là một người mới bắt đầu học lập trình web (đặc biệt là PHP), chắc hẳn bạn đã từng trải qua giai đoạn này: Viết tất cả mọi thứ vào một file duy nhất.

Bạn tạo một file index.php. Trong đó, bạn viết câu lệnh kết nối Database, sau đó là câu truy vấn SQL, rồi xử lý logic if-else, và cuối cùng là chèn cả đống thẻ HTML/CSS để hiển thị dữ liệu.

Code chạy được không? Có. Nhưng chuyện gì xảy ra sau 1 tháng?

File index.php đó dài hàng nghìn dòng. Mỗi lần muốn sửa màu cái nút bấm, bạn phải lội qua hàng trăm dòng code SQL. Mỗi lần muốn sửa logic tính tiền, bạn sợ lỡ tay xóa mất thẻ </div> khiến giao diện vỡ tung tóe.

Đó chính là lúc bạn cần đến MVC.

1. MVC là gì?

MVC là viết tắt của Model - View - Controller.

Đây không phải là một ngôn ngữ lập trình, cũng không phải là một công nghệ. Nó là một Mẫu kiến trúc phần mềm (Architectural Pattern). Hiểu đơn giản như thế này, MVC là một “cách tổ chức code” khoa học, giúp chia nhỏ dự án của bạn thành 3 phần riêng biệt với 3 nhiệm vụ khác nhau, không ai dẫm chân lên ai.

Để hiểu rõ MVC, chúng ta hãy bỏ qua những dòng code khô khan đi và bước vào một ví dụ một nhà hàng sang trọng.

2. Giải mã MVC thông qua ví dụ “Mô hình Nhà hàng”

Hãy tưởng tượng bạn (User/Người dùng) bước vào một nhà hàng để ăn tối. Quy trình đó sẽ diễn ra như thế nào?

  1. Bạn ngồi vào bàn và gọi món bò bít tết.
  2. Người phục vụ (Waiter) ghi lại yêu cầu của bạn và mang xuống bếp.
  3. Đầu bếp (Chef) trong bếp nhận đơn, lấy thịt bò từ kho lạnh, chế biến, nấu nướng.
  4. Sau khi món ăn chín, đầu bếp đưa lại cho người phục vụ.
  5. Người phục vụ mang món ăn đã được bày biện đẹp mắt lên bàn cho bạn.

Trong ví dụ này, 3 thành phần của MVC ứng với 3 vị trí trong nhà hàng:

C - Controller (Người phục vụ)

Controller chính là anh bồi bàn.

M - Model (Đầu bếp & Kho nguyên liệu)

Model chính là khu vực nhà bếp và bác đầu bếp.

V - View (Món ăn & Cách bày trí)

View chính là món ăn được bày trên đĩa mà bạn nhìn thấy.

3. Tại sao lại phải chia tách như vậy?

Tại sao đầu bếp không chạy ra order món luôn cho lẹ? Hay sao người phục vụ không tự vào bếp nấu luôn?

Nếu nhà hàng chỉ có 1 khách, thì việc làm từ A-Z (giống như cách bạn code tất cả chỉ trong 1 file) rất nhanh. Nhưng nếu nhà hàng có 100 khách thì sao ?

Trong lập trình cũng vậy, mô hình MVC mang lại những lợi ích khổng lồ:

a. Dễ dàng bảo trì (Maintenance)

Giả sử sếp đưa ra yêu cầu: “Đổi màu cái nút Mua Hàng từ đỏ sang xanh”.

b. Làm việc nhóm (Teamwork)

Mô hình MVC cho phép tách biệt công việc rõ ràng:

c. Tái sử dụng code (Reusability)

Một logic xử lý trong Model (ví dụ: Hàm tính thuế VAT) có thể được gọi bởi nhiều Controller khác nhau. Bạn viết 1 lần và dùng lại ở nhiều nơi.

4. Luồng đi của dữ liệu trong MVC (Workflow)

Để tổng kết lại, hãy xem một request thực tế trên website diễn ra như thế nào. Ví dụ: Bạn truy cập vào trang: https://loclaptrinh.com/nhan-vien/chi-tiet/10 (Xem thông tin nhân viên có ID là 10).

  1. Request: Trình duyệt gửi yêu cầu đến Server.
  2. Routing (Bộ định tuyến): Server nhìn URL và biết cần gọi Controller nào (Ví dụ: NhanVienController).
  3. Controller: Nhận lệnh “À, khách muốn xem ông số 10”. Controller gọi sang Model: “Ê Model, lấy cho tao thông tin thằng nhân viên số 10 coi”.
  4. Model: Kết nối Database, chạy câu lệnh SELECT * FROM nhan_vien WHERE id = 10. Có dữ liệu rồi, Model trả ngược lại cho Controller.
  5. Controller: Nhận cục dữ liệu từ Model. Bây giờ Controller gọi View: “Ê View, tao có dữ liệu ông số 10 rồi nè, mày đổ dữ liệu này vào giao diện HTML dùm tao”.
  6. View: Nhận dữ liệu, nhúng vào các thẻ HTML tương ứng, tạo thành một trang web hoàn chỉnh.
  7. Response: Trả toàn bộ trang web đó về cho trình duyệt của người dùng.

5. Kết luận

MVC không phải là điều gì quá cao siêu. Nó đơn giản là tư duy ngăn nắp.

Khi bạn đã hiểu được tư duy này, bạn có thể học bất kỳ Framework hiện đại nào như Laravel, CodeIgniter, Symfony (PHP) hay thậm chí là Spring Boot (Java), ASP.NET (C#) một cách dễ dàng, vì tất cả chúng đều vận hành dựa trên trái tim là MVC.


Bạn đã nắm vững lý thuyết kiến trúc nhà hàng rồi chứ?

Ở bài tiếp theo, chúng ta sẽ đi sâu vào “nhà bếp” để xem các đầu bếp xử lý nguyên liệu như thế nào qua khái niệm quan trọng nhất của lập trình Backend.

👉 Đọc tiếp: CRUD là gì? 4 thao tác sinh tử của mọi lập trình viên Backend

Bắt đầu tìm kiếm

Nhập từ khóa để tìm kiếm

↑↓
ESC
⌘K Phím tắt