Get in touch
or send us a question?
CONTACT

Mô hình MVC trong PHP

Mô hình MVC là mô hình được sử dụng rộng rãi nhất trong việc phát triển ứng dụng web. Mặc dù vậy, hiện nay mình thấy rất ít những hướng dẫn thực sự chuẩn và dễ hiểu về mô hình này, do vậy mình sẽ viết một vài chia sẻ về mô hình này.

1. Giới thiệu

– Mô hình MVC là mô hình gồm 3 lớp: Model, View, Controller. Cụ thể như sau:

  • Model: Lớp này chịu trách nhiệm quản lí dữ liệu: giao tiếp với cơ sở dữ liệu, chịu trách nhiệm lưu trữ hoặc truy vấn dữ liệu.
  • View: Lớp này chính là giao diện của ứng dụng, chịu trách nhiệm biểu diễn dữ liệu của ứng dụng thành các dạng nhìn thấy được.
  • Controller: Lớp này đóng vai trò quản lí và điều phối luồng hoạt động của ứng dụng. Tầng này sẽ nhận request từ client, điều phối các Model và View để có thể cho ra output thích hợp và trả kết quả về cho người dung.

– Ta có thể mô tả lại hoạt động của mô hình MVC thông qua sơ đồ sau:

2. Ứng dụng minh hoạ

– Ứng dụng minh hoạ có tính năng sau:

Tổ chức chương trình và source code

– Đầu tiên ta cần có 1 điểm truy cập ban đầu để vào được ứng dụng, file index.php đảm nhận nhiệm vụ này. “Cổng vào” ban đầu này sẽ đóng vai trò hiển thị hết những tính năng mà ứng dụng có, và cho người dùng truy cập vào chức năng mong muốn (controller tương ứng), ở đây để đơn giản thì ta chỉ cài đặt 1 chức năng là “quản lí học sinh”. (Ta vẫn có thể truy cập trực tiếp vào từng chức năng cụ thể ở các file controller)

– Trong ví dụ tới này, mình sẽ tổ chức source code minh hoạ như mô hình sau đây:

Fig 3 – Tổ chức source code của ứng dung minh hoạ
Fig 3 – Tổ chức source code của ứng dung minh hoạ

a. Tầng Controller

– Đây là tầng điều phối của ứng dụng: nhận request từ client, phân tích request, gọi tầng Model để lấy dữ liệu và tầng View để tổ chức hiển thị dữ liệu.

– Ở đây ta nói tới chức năng quản lí học sinh, nó sẽ được điều phối bởi controller C_Student.php. Do trong chức năng có 2 chức năng con: Hiển thị danh sách học sinh, Hiển thị chi tiết học sinh; vậy nên nó sẽ phân biệt từng tính năng bằng cách kiểm tra tham số đầu vào là “stid”. Tuỳ trường hợp mà controller sẽ gọi view tương ứng.

b. Tầng Model và các lớp thực thể (Entity class)

– Nhiệm vụ chính của tầng này là việc thao tác với cơ sở dữ liệu để lưu trữ cũng như truy vấn dữ liệu. Các thao tác với CSDL phải được đặt hết ở trong tầng này, nó sẽ chứa các thao tác cơ bản để truy vấn CSDL như: đọc, thêm, xoá, sửa.

– Ngoài ra thì tằng này còn chứ các lớp thực thể (Entity class), nó là các lớp để mô phỏng những đối tượng trong thực tế. Trong ví dụ này, tầng Model bao gồm 2 class: Model_Student và Entity_Student. Lớp thực thể Entity_Student chính là 1 thực thể mô phỏng về 1 student trong thực tế (tên, tuổi, …), lớp Model_Student sẽ sử dụng lớp thực thể này để cấu trúc dữ liệu sẽ lấy từ Database. Lớp Model_Student đóng vai trò giao tiếp với CSDL.

c. Tầng View

– Lớp này dùng để định dạng hiển thị dữ liệu lên cho người dùng, do ta có 2 tính năng trong phần “quản lí học sinh” là: “danh sách học sinh” và “chi tiết học sinh”, nên ta sẽ có 2 view khác nhau tương ứng. Controller sẽ truyền các biến dữ liệu vào các View để chúng có thể dùng các dữ liệu này để hiển thị lên. Việc này được thực hiện bằng cách nhúng mã PHP vào trong mã HTML.

Nhận xét View:

  • Việc nhúng mã PHP vào HTML khiến mã nguồn trở nên phức tạp và khó kiểm soát, việc này dẫn tới sự ra đời của các “template engine” sau này, các “template engine” tách biệt mã PHP ra khỏi mã HTML nên sẽ khiến code trở nên rõ ràng hơn rất nhiều. Chúng ta sẽ tìm hiểu sau.
  • Đối với các ứng dụng thuần AJAX, phần View có thể được triển khai bởi javascript, kéo theo việc sử dụng cấu trúc JSON.

– Mô hình tuần tự sau sẽ giúp bạn hình dung luồng hoạt động của một http request trong mô hình MVC:

3. Tóm tắt

– Mô hình MVC là mô hình thông dụng và tiện lợi hàng đầu trong việc phát triển ứng dụng web, trên đây trình bày cơ bản về mô hình MVC và các thức của nó hoạt động, các framework khác cũng sẽ tạo ra mô hình MVC với cấu trúc gần tương tự như trên.

– Một vài lợi điểm của MVC:

  • Tách biệt Model và View, tạo sự linh hoạt khi thay đổi ứng dụng (giao diện, xử lí, …)
  • Tầng Model và View có thể thay đổi, chỉnh sửa 1 cách độc lập. Ta có thể tạo các ứng dụng giao tiếp thông minh hơn chỉ bằng cách thay đổi View, hoặc cũng có thể thay thế Database bằng các sử dụng Web service, …