1. Nếu bạn từng đi uống trà đá, thì bạn đã hiểu được MVC rồi
Model – View – Controller (MVC) là một mô hình thiết kế web hiện đại đã trở nên quá đỗi quen thuộc. Cứ thử bước vào một phòng làm việc của các lập trình viên xem, bạn sẽ bị “dội bom” bởi hàng đống thứ khủng khiếp mà bạn có khi còn chưa từng nghe tên như là Ruby on Rails, Angular hay Django.
Nhìn rộng hơn, logic của mô hình MVC được sử dụng để mô tả quá trình làm web của đại đa số các ngôn ngữ như là PHP, Ruby, Python hay JavaScript.
Nhiều ông lập trình web mà cứ theo kiểu nhìn đời qua kẽ lá. Cứ thử để mấy ông lập trình viên khác nhìn vào code của họ xem, họ sẽ cho ngay một bài thuyết trình dài cả tiếng toàn những giáo điều quen thuộc.
Mà rõ ràng là mấy thứ đấy không thực tế. Trong khi mô hình MVC hiện tại hoàn toàn có thể được giải thích dễ dàng bằng hình thức trà đá vỉa hè. Vậy nên, nếu bạn từng đi ngồi trà đá với bạn bè, thì bạn có thể hiểu được cấu trúc của các ứng dụng web hiện đại rồi đấy.
2. Mô hình MVC là gì?
MVC gồm 3 thành phần bao gồm:
- M là Model: một cấu trúc dữ liệu chắc chắn, chuẩn bị dữ liệu để cung cấp cho Controller
- V là View: nơi hiển thị dữ liệu cho người dùng theo cách mà người dùng có thể dễ dàng hiểu và tương tác được
- C là Controller: nhận về lệnh từ người dùng, gửi lệnh đến Model để lấy hay cập nhật dữ liệu, rồi truyền lệnh đến View để cập nhật giao diện hiển thị cho đúng với dữ liệu đã cập nhật
Trên sơ đồ thì nó sẽ như thế này
Ôi giời lằng nhằng phức tạp quá. Làm cốc trà đá cho hạ nhiệt
Bạn bước vào quán trà đá. Giữa mùa hè, quán nào quán nấy nóng nực đông đúc. Bạn luồn lách qua đám đông để gọi cho bằng được bà chủ quán “cho cháu một cốc trà đá cô ơi”.
Lúc này, bạn là “người dùng” và “cốc trà đá” là “yêu cầu từ phía người dùng”. Đối với bạn, cốc trà đá là thứ đồ uống ưa thích, mát lạnh, quá phù hợp để xua tan cái nóng thủ đô 40 độ C.
Bà chủ quán gật đầu “ô kê em nhớ”. Đối với bà chủ quán, cốc trà đá không chỉ ngon lành mát lạnh, mà còn là một mớ quy trình các bước:
- Lấy cái cốc
- Cho đá vào
- Cho trà vào
- Cho thêm nước lọc cho trà loãng bớt
- Khuấy đều lên
- Đưa cốc trà cho bạn
- Thanh toán
Bộ não của bà chủ quán lúc này đóng vai trò Controller. Kể từ thời điểm bạn nói “một cốc trà đá” bằng tiếng Việt và bà chủ quán hiểu được, công việc bắt đầu. Trà đá, nước mía hay cocktail thì cũng như nhau, nhưng nguyên liệu thì hoàn toàn khác biệt. Bà chủ quán chỉ có thể sử dụng những công cụ và nguyên liệu của quán, và những công cụ đó sẽ đóng vai trò Model, bao gồm:
- Đôi tay của bà chủ
- Các nguyên liệu pha chế (trà, nước …)
- Đá lạnh
- Bia, nước ngọt, thuốc lá…
- Chanh, sấu, gừng…
- Các ly cốc để đựng đồ uống
Những nguyên liệu và công cụ này, thông qua một loạt các bước, đã trở thành cốc trà đá mát lạnh đến tay bạn. Cốc trà đá lúc này đóng vai trò “View”. “View” được làm nên từ những công cụ, nguyên liệu trong “Model”, được chế biến và bàn giao tới tay bạn thông qua “Controller” (chính là bộ não của bà chủ quán)
3. Bài học rút ra là gì?
- 1 cốc không đủ, bạn muốn gọi cốc nữa? Rõ ràng là bạn không thể hét to vào cái cốc đã hết (chính là “View”) được, bạn phải gọi bà chủ quán “Controller”.
– Thời gian từ lúc bà chủ quán nhận được yêu cầu tới khi làm xong phải tối thiểu nhất có thể. Đó chính là “skinny controller”, có thể hiểu là “controller” nên chứa tối thiểu lượng logic cần xử lý và được quản lý lượng model nhiều nhất có thể. Một bà chủ quán “thiện nghệ” không chỉ ghi nhớ chính xác cách làm, mà còn chuẩn bị đầy đủ công cụ và nguyên liệu để không mất nhiều thời gian tìm kiếm và chế biến.
– Vậy nếu bà chủ quán đưa hết nguyên liệu cho bạn rồi bảo bạn tự pha? Chẳng ai làm thế cả. Do vậy, bạn cần phải để việc xử lý logic trên model nhiều nhất có thể, và tối giản hóa view. Nói cách khác, được phục vụ tận miệng thì vẫn thích hơn là phải đi pha.
- Nếu bạn gọi 1 lon bia thì sao? Bà chủ chắc chẳng phải làm gì nhiều, bật nắp lon bia rồi đưa bạn là xong. Nhưng mà rõ ràng bạn vẫn phải gọi bà chủ quán, vì lon bia không thể tự nhảy ra trước mặt bạn được.
4. Quay trở lại vấn đề lập trình web
Giờ thử xem một ứng dụng web hiện đại có quy trình thế nào nhé
– Người dùng tạo ra một yêu cầu thông qua đường dẫn, ví dụ /home
– Controller nhận yêu cầu và đưa ra một mệnh lệnh để xử lý yêu cầu đó. Nếu lệnh thực thi với phần View thì cập nhật lại màn hình hiển thị, với Model thì để trình diễn logic. Giả sử yêu cầu của người dùng có yếu tố logic
– Model thực thi phần logic lấy từ một cơ sở dữ liệu nào đó và gửi trả lại phản hồi theo hướng dẫn từ Controller
– Controller truyền dữ liệu này ra phần view và cập nhật lại giao diện cho người dùng.
– Mọi yêu cầu đều phải đi qua Controller trước khi chuyển hóa thành lệnh thực thi cho View hay Model.
5. Tổng kết
Bất cứ khi nào bạn học một framework lập trình web mới, bạn sẽ gặp mô hình MVC. Nói cách khác, một khi bạn đã lập trình dựa trên MVC thì không cần phải ngán bất cứ framework mới nào cả.
Nguồn: https://www.codementor.io/@kevinkononenko/model-view-controller-mvc-explained-through-ordering-drinks-at-the-bar-i7nupj4oe
Nguyễn Khắc Thế