Khi phát triển các dự án Android, liệu bạn có phân biệt được sự khác nhau giữa các mẫu kiến trúc MVC, MVP và MVVM? Hãy cùng tìm hiểu tại bài viết này nhé!
Khi phát triển các dự án Android, các nhà phát triển luôn quan tâm đến việc tổ chức và triển khai các mô hình kiến trúc nhằm tăng hiệu quả, giảm thiểu lỗi và dễ dàng bảo trì, mở rộng trong tương lai. Các mẫu kiến trúc Android phổ biến nhất: MVC (Model — View — Controller), MVP (Model — View — Presenter) và MVVM (Model — View — ViewModel) đã nhận được sự công nhận giữa các nhà phát triển.
+ |
Mẫu Model—View—Controller (MVC)
Mẫu MVC chia mã thành 3 thành phần. Khi tạo ra các lớp, nhà phát triển sẽ chia các lớp vào một trong các thành phần sau:
- Model: Thành phần lưu trữ dữ liệu của ứng dụng. Model không có kiến thức về giao diện; chịu trách nhiệm xử lý logic miền (domain logic) (Là các quy tắc kinh doanh trong thế giới thực) và giao tiếp với cơ sở dữ liệu và các lớp mạng.
- View: là tầng UI (UI Layer – Giao diện người dùng) chứa các thành phần hiển thị trên màn hình. Hơn nữa, nó cung cấp trực quan hóa dữ liệu được lưu trữ trong Mô hình và cung cấp sự tương tác cho người dùng.
- Controller: thiết lập mối quan hệ giữa View và Model. Controller chứa logic ứng dụng cốt lõi và được thông báo về phản hồi của người dùng và cập nhật Mô hình theo nhu cầu.
Mẫu MVP (Model—View—Presenter)
Mẫu MVP khắc phục những thách thức của MVC và cung cấp một cách dễ dàng để cấu trúc mã dự án. MVP được chấp nhận rộng rãi là vì mẫu kiến trúc này cung cấp tính mô-đun, khả năng kiểm thử và cơ sở mã rõ ràng và dễ bảo trì hơn. MVC sẽ chia thành ba thành phần sau:
- Model: Tầng chứa dữ liệu, chịu trách nhiệm xử lý logic miền (quy tắc kinh doanh trong thế giới thực) và giao tiếp với cơ sở dữ liệu và các tầng mạng.
- View: tầng giao diện người dùng (User Interface), cung cấp trực quan hóa dữ liệu và theo dõi hành động của người dùng để thông báo cho Presenter.
- Presenter: Lấy dữ liệu từ Model và áp dụng logic giao diện người dùng để quyết định nội dung sẽ hiển thị; Quản lý trạng thái của View và thực hiện các hành động theo thông báo đầu vào của người dùng từ View.
Mẫu Model – View – ViewModel (MVVM)
Mẫu MVVM có một số tương đồng với mẫu thiết kế MVP(Model — View — Presenter) do ViewModel đóng vai trò Presenter. Tuy nhiên, nhược điểm của mẫu MVP đã được MVVM giải quyết. MVVM tách logic trình bày dữ liệu (View hay UI (Giao diện người dùng)) khỏi phần logic nghiệp vụ cốt lõi của ứng dụng. Các tầng mã riêng biệt của MVVM là:
- Model: chịu trách nhiệm trừu tượng hóa các nguồn dữ liệu. Model và ViewModel phối hợp với nhau để lấy và lưu dữ liệu.
- View: Mục đích của lớp này là thông báo cho ViewModel về hành động của người dùng.View quan sát ViewModel và không chứa bất kỳ loại logic ứng dụng nào.
- ViewModel: hiển thị các luồng dữ liệu có liên quan đến View. Hơn nữa, phục vụ như một liên kết giữa Model và View.
Mẫu thiết kế (Design pattern) MVC, MVP và MVVM khác nhau ở đâu?
MVC(MODEL VIEW CONTROLLER) | MVP(MODEL VIEW PRESENTER) | MVVM(MODEL VIEW VIEWMODEL) |
Một trong những kiến trúc phần mềm lâu đời nhất | Được phát triển như là phiên bản thứ hai của kiến trúc phần mềm, cải tiến từ MVC. | Mẫu kiến trúc được ngành công nghiệp công nhận cho các ứng dụng. |
Giao diện người dùng (View) và cơ chế truy cập dữ liệu (Model) được kết hợp chặt chẽ với nhau. | Giải quyết vấn đề phụ thuộc View bằng cách sử dụng Presenter (Người thuyết trình) làm kênh liên lạc giữa Model và View. | Mẫu kiến trúc này là hướng sự kiện nhiều hơn vì sử dụng liên kết dữ liệu và do đó giúp dễ dàng tách logic nghiệp vụ cốt lõi khỏi View. |
UI(View) and data-access mechanism(Model) are tightly coupled. | It resolves the problem of having a dependent View by using Presenter as a communication channel between Model and View. | This architecture pattern is more event-driven as it uses data binding and thus makes easy separation of core business logic from the View. |
Controller và View tồn tại với mối quan hệ một-nhiều (One-to-many). Một Controller có thể chọn một View khác dựa trên hoạt động được yêu cầu. | Mối quan hệ một-một (one-to-one) tồn tại giữa Presenter và View khi lớp Presenter quản lý một View tại một thời điểm. | Nhiều View có thể được ánh xạ với một ViewModel duy nhất và do đó, mối quan hệ một-nhiều (one-to-many) tồn tại giữa View và ViewModel. |
View không có kiến thức về Controller. | View có tham chiếu đến Presenter | View tham chiếu đến ViewModel |
Khó thực hiện thay đổi và sửa đổi các tính năng của ứng dụng vì các tầng mã được liên kết chặt chẽ với nhau. | Các tầng mã được liên kết lỏng lẻo và do đó dễ dàng thực hiện các sửa đổi/thay đổi trong mã ứng dụng. | Dễ dàng thực hiện các thay đổi trong ứng dụng. Tuy nhiên, nếu logic liên kết dữ liệu quá phức tạp, việc gỡ lỗi ứng dụng sẽ khó hơn một chút. |
Đầu vào người dùng được xử lý bởi Controller | View là điểm vào của Ứng dụng | View nhận đầu vào từ người dùng và đóng vai trò là điểm vào của ứng dụng. |
Chỉ lý tưởng cho các dự án quy mô nhỏ. | Lý tưởng cho các ứng dụng đơn giản và phức tạp. | Không lý tưởng cho các dự án quy mô nhỏ. |
Hỗ trợ hạn chế cho kiểm thử Đơn vị. | Dễ dàng thực hiện kiểm thử Đơn vị nhưng sự liên kết chặt chẽ giữa View và Presenter có thể gây khó khăn đôi chút. | Khả năng kiểm thử đơn vị cao nhất trong kiến trúc. |
Kiến trúc này phụ thuộc nhiều vào Android API. | Có ít phụ thuộc vào Android API. | Có ít hoặc không phụ thuộc vào Android API. |
không tuân theo nguyên tắc trách nhiệm đơn lẻ và mô đun hóa. | Tuân theo nguyên tắc trách nhiệm đơn lẻ và mô đun hóa. | Tuân theo nguyên tắc trách nhiệm đơn lẻ và mô đun hóa. |
Sự khác biệt chính giữa MVP và MVC là Presenter (Người trình bày) trong MVP có vai trò tích cực hơn trong giao tiếp giữa Model và View và chịu trách nhiệm kiểm soát luồng dữ liệu giữa hai bên. Trong mẫu MVVM, Model đại diện cho dữ liệu và logic của ứng dụng, View đại diện cho giao diện người dùng của ứng dụng và “ViewModel” là một lớp nằm giữa Model và View và chịu trách nhiệm hiển thị dữ liệu và logic của Model sang View theo cách dễ làm việc hơn. ViewModel cũng xử lý đầu vào của người dùng và cập nhật Model khi cần.
Nhìn chung, sự khác biệt chính giữa các mẫu này là vai trò của thành phần hòa giải. Cả MVC và MVP đều liên quan đến Controller hay Presenter đóng vai trò trung gian giữa Model và View, trong khi MVVM liên quan đến ViewModel đóng vai trò trung gian giữa Model và View.
MVC là mẫu đơn giản nhất trong số các mẫu này, trong khi MVP và MVVM linh hoạt hơn và cho phép phân tách rõ ràng hơn các mối quan tâm giữa các layers (Tầng) khác nhau của ứng dụng.
Nghe có vẻ phức tạp nhưng sẽ rất dễ phân biệt nếu các bạn tìm hiểu kĩ về khái niệm giữa mẫu kiến trúc MVC, MVP và MVVM đấy! Chúc các bạn dễ dàng nắm bắt kiến thức này trong phát triển các ứng dụng Android nhé!
Bộ môn CNTT
Cao đẳng FPT Mạng cá cược bóng đá
Đà Nẵng