Đi uống coffee học mô hình MVC [Design Pattern]

Mô hình MVC là một mẫu thiết kế hay nói cách khác sang chảnh hơn là Design Pattern được áp dụng rộng rãi và phổ biến trên hầu hết các ngôn ngữ lập trình hướng đối tượng hiện nay từ như PHP, Ruby, và không thể thiếu người anh em có tiếng nói Java …. Với bài viết này chúng ta sẽ làm rõ về MVC với những lý thuyết thực tế để bạn hiểu một cách tổng quan về mô hình MVC, từ đó có thể áp dụng vào dự án của mình.

Đầu tiên, nói MVC mà không hiểu MVC nó là cái quái gì thì thật là…sử dụng mà không hiểu bản chất, điều đó nên tránh với các lập trình viên.

MVC là gì?

 

MVC viết tắt của 3 từ:

M: Model

V: View

C: Controller

Model – View – Controller (MVC) là một mẫu thiết kế nhằm mục tiêu chia tách phần Giao diện và Code để dễ quản lý, phát triển và bảo trì.

MVC chia ứng dụng phần mềm ra làm 3 phần tách biệt nhau mà mỗi phần làm một chức năng khác nhau:

Model thực hiện nhiệm vụ tương tác và xử lý mọi thứ liên quan đến database. (CSDL)

View:đây là phần hiển thị, cập nhật giao diện cho người dùng. Là bộ mặt của một project ^^.

Mô hình MVC

Mô hình MVC

Controller: là phần xử lý logic, business của một request từ client gửi đến. Khi một request gửi đến thì controller sẽ lấy request đó gửi đến model, model xử lý xong trả kết quả về. Controller có kết quả trả về và nó gửi trả lại kết quả đó cho view, view cập nhật, thay đổi giao diện cho người dùng.

Có thể nói, Controller như nhịp đập trái tim của mô hình MVC, nếu không có controller, View và Model như hai người xa lạ mà chẳng bao giờ thuộc về nhau. Cảm ơn người anh em Controller kết nối Anh M và chị V lại với nhau.

Nếu ta nói, Model và View có thể tương tác được với nhau thì lúc đó, chúng ta đã phá với quy tắc của mô hình Design Pattern MVC. Vậy nên có câu hỏi nào liên quan với mô hình MVC, bảo rằng  M và V có tương tác trực tiếp với nhau hay không thì câu trả lời chắc chắn là không theo mô hình MVC nhé.

Đến đây, mình nghĩ các bạn đã hiểu một phần nào đó nhưng có lẻ hơi hơi mơ hồ đúng không?

OK, không sao. Trên là lý thuyết, bản chất của lý thuyết là từ thực tế có được. Mình sẽ nói đến một ví dụ mà chắc hẳn rằng, bạn nào cũng đã từng đi uồng coffee relax đúng không nào?  Cuối tuần relax ngắm máy cô em xinh đẹp ^^.

OK, ready, Đầu tiên các bạn sẽ nhìn các bức ảnh bên dưới:

Ví dụ thực tế….

Cô nhân viên phục vụ đang giao nước cho khách hàng

Phục vụ pha chế nước, món cho khách hàng

Nhân viên pha chế

Trên là 3 bức ảnh ví dụ về mô hình MVC mà mình sẽ đề cập đến ví dụ, ví dụ của mình là đi uống coffee.

Gỉa sử như các bạn là khách hàng đến uống coffee ngắm máy em xinh tươi, hay máy anh chàng đẹp trai thì lúc này các bạn đang giữ vai trò là VIEW.

Khi bạn đến sẽ có nhân viên phục vụ đến hỏi bạn uống nước gì để order, lúc nào nhân viên phục vụ đó chính là CONTROLLER.

Nhiệm vụ của CONTROLLER là lấy yêu cầu (request) từ người dùng, lúc nào cô nhân viên phục vụ ở bức ảnh đầu tiên sẽ hỏi xem khách hàng uống nước gì, sau khi khác hàng phản hồi thì cô nhân viên phục vụ (Controller) này lại lấy yêu cầu đó gửi đến cho người pha chế (MODEL) chính là bức ảnh thứ 2. Người pha chế lấy yêu cầu là làm món theo yêu cầu,  sau khi làm xong thì sẽ gửi lại món đó cho người anh em bưng bàn phục vụ (Controller), lúc nào đã có món và cô phục vụ bàn (Controller) sẽ trả món cho khách hàng (View). Lúc nào Khách hàng đã có món yêu cầu (response).

Từ ví dụ trên,các bạn thấy rằng người khách hàng sẽ không biết và không quan tâm cô pha chế (Model) sẽ làm như thế nào, chỉ quan tâm đến món mình được nhận đúng với yêu cầu mà thôi. Controller (là người phục vụ bàn) đóng vai trò quan trọng, tương tác giữa khách hàng và người pha chế. Nếu lấy yêu cầu sai thì người pha chế cũng từ đó trả kết quả về sai.

Có thể nói rằng cũng từ ví dụ trên ta thấy ƯU ĐỂM của mô hình MVC như thế nào:

1.Dễ dàng bảo trì hệ thống, chỉnh sửa. 

Chẳng hạn như nếu như không tách biệt 3 phần trên, chúng ta có thể chỉ duy nhất 1 nhân viên nhưng có thể làm đồng thời 3 nhiệm vụ trên. Tất nhiên cô nhân viên này phải đa năng, nghĩa là làm đồng thời 3 công việc. Và một ngày nào đó cô này bị ốm, ông chủ quán phải tuyển 1 người có đa năng trọng trách đồng thời 3 công việc trên thì tìm hơi khó, tuy nhiên nếu làm với mô hình MVC, thì chúng ta đã tách 3 phần riêng biệt với nhau. Mỗi người đóng một vai trò riêng, khi bảo trì hay chỉnh sửa thì chỉ cần đến phần đó chỉnh sủa, thay thế. Chẳng hạn như nếu cô nhân viên pha chế ốm hay có việc đột xuất thì chủ quán có thể thay thế cô nhân viên khác một cách dễ dàng.

2. Với MVC, khi các bạn làm việc với các dự án thực tế, thì dễ làm việc theo team. Mỗi người làm một công việc riêng mà chẳng quan tâm đến nhau. Tất nhiên khi tách biệt như thế, chúng ta có tính ngữ nghĩa và dễ dàng mở rộng project sau này.

Bài viết trên mang tính chất thực tế, từ kinh nghiệm và ngẫu hứng viết bài chia sẻ. Hy vọng sẽ giúp các bạn hiểu bản chất mô hình MVC và áp dụng vào dự án của mình.

Thanks all!