MVP Pattern for Android

Mô hình MVP (Model View Presenter) là 1 dẫn xuất từ quy mô MVC (Model View Controller), hiện nay tại đang được áp dụng trong không ít ứng dụng Android.

Bạn đang xem: Mvc mvp và mvvm là gì? so sánh Ưu và nhược Điểm 3 mô hình mvp là gì

Bài viết này reviews khái quát về mô hình MVP cũng tương tự đưa ra một trong số không ít cách triển khai quy mô này bên trên Android.

Mô hình MVP là gì?

MVP là một mô hình kiến trúc hướng giao diện tín đồ dùng, được thiết kế để tạo dễ ợt cho câu hỏi kiểm thử đơn vị (unit testing) cùng tăng tính tách bóc biệt thân tầng tài liệu và tầng hiển thị tài liệu trong mô hình MVC.

Mô hình MVP mang đến phép tách tầng thuyết trình (Presenter) thoát ra khỏi tầng dữ liệu (Model), vị vậy liên can với hình ảnh được tách biệt cùng với cách bọn họ biểu diễn nó trên màn hình hiển thị (View), tuyệt nói bí quyết khác, toàn bộ logic khi người dùng tương tác được tách bóc ra và chuyển vào tầng trình diễn. Xây dựng lý tưởng độc nhất là với cùng một logic được áp dụng cho những View khác nhau và hoán đổi được cho nhau.

Trong đó:

Model là một interface xác minh cách mà tài liệu được hiển thị vào giao diện bạn dùng.View là 1 trong những giao diện người tiêu dùng thụ cồn hiển thị dữ liệu (Model) và đón nhận tương tác người tiêu dùng và truyền tới nhằm Presenter xử trí tương tác.Presenter được ví như middle-man. Khi người tiêu dùng tương tác với View, Presenter đón nhận tương tác người dùng và update Model. Khi model được update hay gồm thay đổi, Presenter lấy tài liệu từ Model, format và mang đến View nhằm hiển thị.

*

Luồng tài liệu trong mô hình MVP

Điểm khác biệt dễ thấy nhất tại chỗ này khi so sánh quy mô MVP với mô hình MVC đó là vị trí cũng như tác dụng của tầng Presenter cùng View so với tầng Controller:

Trong quy mô MVP, tầng View là tầng duy nhất mừng đón tương tác người tiêu dùng thay vì cả 2 tầng View với tầng Controller trong mô hình MVC. Súc tích xử lý tương tác cũng tương tự logic xử lý tài liệu hiển thị được bóc ra vào tầng Presenter thay vì chưng được gộp bình thường với chào đón tương tác vào Controller.

Tại sao áp dụng MVP?

Trong Android, bao gồm một sự việc phát sinh từ thực tiễn là các cơ chế xử lý can dự trong game android được kết hợp chặt chẽ giữa giao diện người tiêu dùng và xử lý, truy vấn dữ liệu.

Một ví dụ điển hình nổi bật là CursorAdapter, đó là sự phối kết hợp của bài toán định dạng tài liệu với xử lý địa chỉ giao diện. Đôi khi trong số ấy còn bao hàm cả cách xử lý dữ liệu tại mức sâu hơn (như cửa hàng với CSDL) trải qua Cursor.

Xem thêm: Giới Thiệu Sách Hướng Dẫn Du Lịch Việt Nam, Tài Liệu Sách Hướng Dẫn Du Lịch Chọn Lọc

Việc phối kết hợp này hoàn toàn có thể giúp giảm thiểu lượng code vào ứng dụng tương tự như gộp các xử lý, xúc tích và ngắn gọn trong vận dụng vào cùng một nơi. Nhưng so với một ứng dụng tiếp tục phát triển, hay 1 ứng dụng lớn, việc này khiến cho lượng code trên mỗi xúc tích và ngắn gọn trở bắt buộc rất lớn, các logic xen lần, chồng chéo cánh lên nhau, rất khó khăn cho việc đọc hiểu, gia hạn cũng như mở rộng.

Phân tầng, phân lớp ứng dụng hoàn toàn có thể giảm đi hiệu năng do vận dụng cần thêm các tài nguyên, mà lại tính khả chuyển của vận dụng cũng tăng gấp nhiều lần., ngoài ra còn không ngừng mở rộng khả năng cho phép kiểm thử từng phần của áp dụng trở nên dễ dãi hơn. Bởi vì thế xem xét giữa hiệu năng và tính dễ dãi mở rộng, duy trì là hết sức quan trọng.

Trong Android, kiểm thử là 1 vấn đề khó khăn vì côn trùng liên kết nghiêm ngặt giữa giao diện, logic và dữ liệu. MVP tách bóc biệt giao diện khỏi dữ liệu, chia áp dụng ra thành tối thiểu ba lớp khác nhau, từ bỏ đó rất có thể kiểm demo một những độc lập. Với MVP ta có thể kiểm thử đo lường một cách tối đa các logic của ứng dụng.

Triển khai MVP bên trên Android

Có tương đối nhiều biến thể cũng như cách thức triển khai MVP, toàn bộ mọi người có thể điều chỉnh mô hình này tùy theo nhu yếu và bí quyết họ cảm thấy thoải mái và dễ chịu hơn. Các mô hình này, về cơ bản khác nhau làm việc số lượng tính năng mà tầng Presenter đảm nhận.

Một view nhận tương bóc từ người tiêu dùng disable hoặc enable progress bar, liệu tất cả nên giao trách nhiệm này cho một presenter? Một Activity đang nhận sự kiện click vào nút settings trên ActionBar giỏi sự khiếu nại này sẽ được một đối tượng người tiêu dùng presenter trong Activity đảm nhận?

Những thắc mắc như vậy tạo ra ra nhiều cách thức để chúng ta triển khai mô hình MVP, với trên thực tế chưa xuất hiện một tiêu chuẩn đúng đắn nào được chuyển ra. Bởi vì vậy tiếp sau đây tôi xin trình bày một trong những phương pháp đó.

Tầng diễn đạt - Presenter

Tầng thuyết trình có trọng trách như một middle-man giữa View với Model. Nó lấy tài liệu từ Model, định dạng cùng trả về cho View. Tuy thế không giống như MVC, nó cũng đưa ra quyết định những gì sẽ xảy ra khi người tiêu dùng tương tác với View, hay có thể nói rằng nó hàm chứa ngắn gọn xúc tích ứng dụng.

Tầng lô ghích dữ liệu - Model

Trong một áp dụng với xây cất kiến trúc tốt, mô hình này vẫn chỉ là 1 gateway giữa tầng domain cùng tầng business logic. Trong quy mô Clean Architecture của Uncle Bob, mã sản phẩm sẽ là 1 trong interactor thự thi một use case. Để đối kháng giản, sinh hoạt đây mã sản phẩm đơn thuần được đánh giá như một data source - cung cấp dữ liệu bọn họ muốn hiển thị trong bối cảnh ứng dụng.

Tầng đồ họa - View

View, thường được implement bởi vì một Activity (hoặc rất có thể là một Fragment, một View ... Tùy thuộc vào cấu tạo ứng dụng), Activity này sẽ cất một thuộc tính là 1 lớp Presenter. Lý tưởng nhất Presenter cần được hỗ trợ bởi một Dependency Injection framewok như Dagger, nhưng lại trong trường hợp vận dụng không thực hiện một thư viện hay framework bởi vậy ta hoàn toàn có thể tạo ra các đối tượng Presenter này.

Sau đây là ví dụ xúc tiến một màn hình hiển thị Login trong Android:

Lớp LoginActivity implements LoginView interface để hiển thị công dụng tới người dùng, đồng thời một thuộc tính LoginPresenter chịu đựng trách nhiệm tiếp nhận và thực thi lô ghích ứng dụng (ở đấy là xác thực người dùng) cùng trả

public class LoginActivity extends Activity implements LoginView, View.OnClickListener { private ProgressBar progressBar; private EditText username; private EditText password; private LoginPresenter presenter;

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *