Mục lục
Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu sự khác nhau giữa MVC – Model View Controller và MVP – Model View Presenter.
Design Pattern và Architectural Pattern
Architectural Pattern
Architectural Pattern là các giải pháp được áp dụng trong kiến trúc tổng thể của một ứng dụng, nó có ảnh hưởng rất lớn đến codebase của dự án.
Ví dụ như nó cung cấp một giải pháp chỉ ra cách một request được xử lý như thế nào, nó đi ra bao nhiều tầng (layer) mỗi layer đảm nhận những công việc cụ thể nào.
Một số Architectural Pattern phổ biến hiện nay như MVC, MVP, MVVM.
Design Pattern
Design pattern thường liên quan đến cách viết mã code, chúng được dùng để giải quyết một số vấn đề cục bộ, nhỏ lẻ và không ảnh hưởng đến codebase của dự án. Ví dụ: Làm thể nào để khởi tạo 1 object khi chỉ có thể biết được loại object ta muốn khởi tạo lúc run-time (dùng Factory class?) Làm sao để khởi tạo duy nhất 1 object có thể sử dụng trong toàn bộ ứng dụng, ví dụ như Logger, ConfigHoler (Singleton?) Strategy, State machine v.v
MVC Pattern
Như đã đề cập ở trên thì MVC là một Architectural Pattern cung cấp một giải pháp tổng thế để xây dựng codebase cho dự án. Trong MVC pattern có 3 thành phần chính:
- Model – đây là nơi lưu trữ toàn bộ dữ liệu của ứng dụng, chịu trách nhiệm xử lý các tác vụ business và giao tiếp với cơ sở dữ liệu.
- View – đây là lớp hiện thể giao diện người dùng.
- Controller – chịu trách nhiệm thiết lập mối quan hệ giữa View và Model. Nó sẽ lắng nghe các sự kiện của người dùng thao tác trên giao diện và xử lý chúng. Trong hầu hết các trường hợp, nó sẽ gọi một phương thức được định nghĩa trong Model. Model và View được kết nối với nhau qua Controller nên khi dữ liệu được cập nhật thì giao diện ở tầng View sẽ tự động được cập nhật.
Tầng View và Model được liên kết rất chặt chẽ, do đó việc thay đổi các chức năng trên tầng View sẽ gây ảnh hưởng đến đến Model. Khiến cho việc chỉnh sửa, cập nhật ứng dụng sẽ trở nên khó khăn hơn.
Ví dụ đơn giản về triển khai MVC pattern
MVP Pattern
MVP Pattern được phát triển dựa trên ý tưởng của MVC Pattern. Tuy nhiên, nó được phát triển để cải tiến những nhược điểm trong mô hình MVC giúp ứng dụng có tính module hóa hơn.
Pattern có 3 thành phần chính:
- Model – Layer lưu trữ dữ liệu của ứng dụng. Nó chịu trách nhiệm xử lý các business logic và giao tiếp với database
- View – Hiển thị giao diện người dùng, theo dõi các hành vi của người dùng và thông báo chúng đến Presenter layer
- Presenter – Xử lý các yêu cầu của layer View, lấy dữ liệu từ Model sau đó định dạng lại dữ liệu và hiển thị chúng lên tầng View
Các đặc điểm chính trong mô hình MVP:
- Giao tiếp giữa View-Presenter và Presenter-Model diễn ra thông qua một Interface hay còn gọi là Contract
- Mỗi một View class liên kết một Presenter class, mối quan hệ giữa chúng là 1-1
- Layer Model và View không có mối liên hệ với nhau, từ đó chúng ta có thể dễ dàng chỉnh sửa 1 trong 2 layer này mà không sự ảnh hưởng lẫn nhau
So sánh giữa MVP và MVC
Có rất nhiều điểm khác biệt giữa 2 pattern này, tuy nhiên cả 2 đều hướng đến việc phân tách ứng dụng thành nhiều thành phần nhỏ, mỗi thành phần sẽ chịu trách nhiệm cho một số công việc nhất định.
Dưới đây là một số sự khác biệt giữa MVC và MVP:
- Liên kết – Layer View và Model trong MVC liên kết chặt chẽ hơn trong MVP
- Giao tiếp – Giao tiếp giữa View-Presenter và Presenter-Model diễn ra thông qua một Interface, Presenter chịu trách nhiệm xử lý logic hiển thị cho tầng View. Còn Layer controller trong MVC chỉ là cầu nối cho View và Model, nó không chịu trách nhiệm xử lý logic cho tầng View.
- Xử lý hành vi người dùng – Trong MVC hành vi người dùng được xử lý bởi Controller nó hướng dẫn Model thực hiện các hành động cần thiết để cập nhật dữ liệu. Nhưng trong MVP, hành vi người dùng được xử lý bởi View và nó hướng dẫn cho Presenter thực thi các hàm cần thiết.
- Mối quan hệ – many-to-one là mối quan hệ giữa View và Controller trong MVC, nhưng trong MVP thì Presenter và View có mối quan hệ one-to-one.
- Thành phần chính – Trong MVC, layer Controller là thành phần chính, nó quản lý View và tương tác với Model để phục vụ các yêu cầu của người dùng. Còn trong MVP View là thành phần chính, nó trực tiếp nắm bắt các hành vi người dùng và gọi đến các method trong Presenter tương ứng để thực hiện yêu cầu của người dùng.
Nguồn
https://www.geeksforgeeks.org/mvp-model-view-presenter-architecture-pattern-in-android-with-example/
https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter
https://www.geeksforgeeks.org/difference-between-mvc-and-mvp-architecture-pattern-in-android/