MVC là gì? Đôi điều về mô hình MVC

Nếu bạn là một lập trình viên thì chắc chắn không lạ gì mô hình MVC, đây là một trong những cái tên quen thuộc trong việc lập trình web.

Bạn đang học để có thể lập trình web riêng? Hay muốn xin việc với vai trò lập trình viên trong các công ty? Thật sự khó khăn nếu như bạn không biết đến mô hình MVC. Vì đây là điều cơ bản tối thiểu để giúp bạn thành công trong công việc. Vậy MVC là ? Mô hình MVC trong php là gì? Hãy cùng nhau tìm hiểu về mô hình này nhé.

MVC là gì?

MVC là tập hợp chữ cái đầu tiên của Model – View – Controller. Đây là một dạng kiến trúc phần mềm hay còn được gọi là mô hình thiết kế. Được các lập trình viên sử dụng trong các kỹ thuật phần mềm. Nói một cách dễ hiểu, thì đây là mô hình phân bố gồm có 3 thành phần, mỗi thành phần có một công tác riêng biệt và độc lập với các thành phần khác.

MVC là gì?
MVC là gì?

Trong đó:

  • Model: Là thành phần chứa các nghiệp vụ logic, phương thức xử lý, thao tác các dữ liệu, truy xuất database hay đối tượng mô tả dữ liệu như các Class và hàm xử lý, . . .
  • View: Có nhiệm vụ tiếp nhận dữ liệu từ Model, đảm nhận công việc hiển thị thông tin, tương tác với người dùng, nơi chứa tất cả các đối tượng như textbox, images, . . . Hay hiểu một cách đơn giản thì nó là nơi tập hợp cá form hoặc các file HTML. Hiểu một các ngắn gọn thì đây là thành phần hiển thị giao diện.
  • Controller: Có nhiệm vụ nhận điều hướng các yêu cầu của người dùng và tìm ra những phương thức xử lý chúng

MVC có ưu và nhược điểm gì?

Ưu điểm:

  • Mang tính chuyên nghiệp trong lập trình, phân tích và thiết kế. 
  • Vì tính chất được chia nhỏ giúp các thành phần hoạt động độc lập nên có thể làm việc theo nhóm người, phân công công việc.
  • Nhanh chóng dễ dàng nâng cấp và bảo trì.
  • Dễ dàng debug trong quá trình xây dựng

Nhược điểm:

  • Xây dựng cầu kỳ và mất thời gian
  • Sẽ mất thời gian, cồng kềnh nếu là cá dự án nhỏ
  • Hệ thống chạy chậm hơn PHP thuần,

Mô hình MVC trong PHP

MVC PHP được coi là một mô hình chuẩn cho ứng dụng web. Đây là mô hình được sử dụng rộng rãi hiện nay. Trước được người ta sử dụng lần đầu tiên trong Smalltalk, tiếp theo là sử dụng trong ngôn ngữ lập trình của Java.

Mô hình được sử dụng phổ biến, có rất nhiều PHP framework sử dụng dựa trên mô hình này. PHP MVC được chia ra làm 3 phần khác nhau với những chức năng khác tương tác với nhau để xử lý và bảo trì một cách nhanh chóng.

Ngoài ra, PHP framework được sử dụng phổ biến trong mvc pattern

Mô hình MVC trong PHP
Mô hình MVC trong PHP

Nhìn vào hình ảnh trên ta sẽ thấy được mối liên hệ giữa model và view là hoàn toàn không có mà sẽ dựa vào controller giao tiếp với nhau.

Mỗi phần đều được rõ ràng để việc viết, sửa chữa hay nâng cấp, làm việc nhóm trở nên dễ dàng hơn. Ngoài ra trong quá trình viết và vận hành còn có thể tìm lỗi sai và sửa chúng.

Vai trò của các thành phần trong MVC

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

Ví dụ: trong chức năng quản lí học sinh, sẽ được điều phối bơi controller C_Student.php. Vì trong chức năng sẽ có 2 chức năng con: Hiểu thị danh sách học sinh và Hiển thị chi tiết học sinh. 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”. Tùy vào từng trường hợp mà controller sẽ gọi view tương ứng

Vai trò của các thành phần trong MVC
Vai trò của các thành phần trong MVC

Tùy theo từng thiết kế, ta sẽ thấy Controller gồm:

  • Front Controller
  • Dispatcher
  • Action Mapping
  • Action Filter
  • Action: lớp xử lý các sự kiện chính, nơi dẫn đến application flow chủ yếu (Main Event Handler)
  • Response
  • Request: xử lý một phần user input ở mức GET, POST và PUT
  • Session: xử lý một phần user input ở mức SESSION

Controller thực hiện các phép lọc tùy theo user input. Đưa ra các tính toán, lựa chọn dựa trên kiến trúc và cấu hình nhằm xác định ra thành phần lớp chính được thực hiện theo yêu cầu của user. Đây là chức năng điều khiển application flow của Controller. Vì đây là nơi đón nhận user input cho nên các thành phần xử lý form sẽ thuộc về Controller. Ngoài ra, Controller còn có chức năng validate form đơn giản nhằm thực hiện chức năng điều khiển luồng của mình.

 

  • Model: Là các lớp cung cấp dữ liệu, dịch vụ liên quan đến dữ liệu. Có nhiệm vụ chính là thao tác với cơ sở dữ liệu để lưu trữ và truy vấn dữ liệu. Tất cả các thao tác với cơ sở dữ liệu cần phải được đặt hết ở trong tầng này. Sẽ bao gồm các thao tác cơ bản để: đọc, thêm, xóa, sửa để truy vấn cơ sở dữ liệu

 

Nói một cách chi tiết, model có thể là:

  • Đánh giá tính hợp lệ của dữ liệu
  • Chuyển đổi dữ liệu
  • Đưa ra quyết định về nghiệp vụ
  • Thực hiện việc xử lý dữ liệu theo một quy trình

Có 2 vai trò tương đối tách biệt nhau tạo nên một Model. Thường được tách thành các lớp có domain xử lý khác biệt.

  • Business logic thường là xử lý rule hay policy của nghiệp vụ cũng như business workflows. Có sự góp mặt của các rule engine và các integration engine
  • Domain data: Cung cấp hay lưu trữ dữ liệu và việc chuyển đổi dữ liệu thành các dạng khác nhau theo yêu cầu. Các tầng như Persistence Layer nằm ở đây nên sẽ gặp các lớp của PDO, Pear MDB2, PHP Doctrine, JDBC, JTA, JPA, Hibernate, JDO, . . . Và cả các lớp thực hiện DAO

Là Passive dùng để hoạt động như một Service Layer để có thể re-use giữa các Controller nhưng không phải là dead-end. Thay vào đó nó cần biết giao tiếp với Controller thế nào để hiệu quả nhất. Sự hiệu quả này có thể thể hiện qua 2 hướng:

  • Signal hay message
  • Data Type

Tương tự cách trả lại các đối tượng được định nghĩa rõ ràng, Model trả tỏ ra có trách nhiệm với Controller hay các thành phần gọi nó để giúp nó bớt confused và tạo ra sức mạnh của The Power Of Sameness. Tuy nhiên, đây là một data container thuần thúy hay là một Domain Object thì còn chưa xác định được.

MVC
MVC

Tương tự như trong trường hợp Controller lấy state từ Model, khi Controller cung cấp thông số cho Model để Model trả lại state theo hướng mà Controller mong muốn từ Controller cũng phải định nghĩa được 1 common interface.

  • View: bao gồm các lớp định nghĩa, cách thức trình bày dữ liệu (không update dữ liệu). Được dùng để định dạng hiển thị dữ liệu lên cho người dùng

Bao gồm 2 phần chính:

  • Template file định nghĩa cho cấu trúc và cách thức trình bày dữ liệu cho user. Ví dụ như layout, color, windows …
  • Logic xử lý cách áp dụng dữ liệu vào cấu trúc trình bày. Bao gồm việc kiểm tra định dạng dữ liệu, chuyển đổi định dạng dữ liệu sang một dạng dữ liệu trung gian để hiển thị với cấu trúc template đang có…, kiểm tra trạng thái và đặc tính của dữ liệu để lựa chọn một cấu trúc hiển thị phù hợp. Tuy nhiên là trong Passive View thì việc lựa chọn cấu trúc hiển thị đôi khi lại do Controller.

Đây là tổ hợp của nhiều lớp, có thể Subview để giảm tải trên 1 số lớp chính và để sử dụng lại mã. Vì vậy View có tính logic và có thể là logic của một cây phân cấp.

Trong mô hình MVC, View có trách nhiệm chuyển đổi dữ liệu hay state của Model thành cấu trúc Visual. Sự tách biệt của 2 thành phần này sẽ giúp người lập trình viên phân định được biên giới rõ ràng giữa cách thức lưu trữ và lấy dữ liệu, trình bày dữ liệu. Vì vậy tính phức tạp của quy trình lấy dữ liệu, xử lý dữ liệu cũng như trước khi trở về sẽ không làm ảnh hưởng đến việc trình bày dữ liệu. Vậy, với sự khác biệt về công nghệ lấy dữ liệu, công nghệ render không gây ảnh hưởng đến ứng dụng. Đây là việc khá quan trọng trong việc tích hợp các ứng dụng.

Vai trò của View cần thay đổi đặc biệt là các ứng dụng web thiên về View phức tạp khi vai trò của Model đã trở nên ổn định.

Mô hình MVC
Mô hình MVC

Nói một cách ngắn gọn và dễ hiểu hơn, dựa vào mô hình trên thì bạn thấy Model và View không hề có mối liên hệ vào mà chỉ thông qua controller để giao tiếp với nhau.

Mô hình MVC thông dụng và tiện lợi hàng đầu trong việc phát triển ứng dụng web. Bài viết đã trình bày được cơ bản về mô hình cũng như cách thức hoạt động của 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ự

Vậy là bạn đã phần nào hiểu được về mô hình MVC cũng như biết đến vai trò của các thành phần trong mô hình MVC. Mong rằng bài viết sẽ giúp ích được phần nào cho công việc hoặc trong việc học tập của bạn.

Trả lời

8 − four =