Mô hình MVP (Model View Presenter) là 1 dẫn xuất từ quy mô MVC (Model View Controller), hiện tại đang rất được áp dụng trong vô số ứng dụng Android.Bạn đã xem: mô hình mvp là gì
Bài viết này reviews khái quát lác về quy mô MVP cũng giống như đưa ra một trong những số rất nhiều cách triển khai mô hình này trên Android.
Bạn đang xem: Mô hình mvp là gì
Mô hình MVP là gì?
MVP là một quy mô kiến trúc hướng giao diện tín đồ dùng, có phong cách thiết kế để tạo thuận lợi cho việc kiểm thử đơn vị (unit testing) với tăng tính tách bóc biệt thân tầng tài liệu và tầng hiển thị dữ liệu trong mô hình MVC.
Mô hình MVP mang lại phép tách tầng biểu lộ (Presenter) ra khỏi tầng dữ liệu (Model), vị vậy tác động với giao diện được tách biệt cùng với cách họ biểu diễn nó trên màn hình hiển thị (View), xuất xắc nói giải pháp 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 đắp lý tưởng độc nhất là với 1 logic được áp dụng cho những View khác nhau và hoán thay đổi được đến nhau.
Trong đó:
Model là 1 trong interface xác minh cách mà dữ liệu được hiển thị trong giao diện tín đồ dùng.View là một giao diện người dùng thụ đụng hiển thị dữ liệu (Model) và tiếp nhận tương tác người dùng và truyền tới nhằm Presenter giải pháp xử lý tương tác.Presenter được ví như middle-man. Khi người 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 mã sản phẩm được update hay bao gồm thay đổi, Presenter lấy dữ liệu từ Model, format và mang tới View để hiển thị.
Luồng dữ liệu trong quy mô MVP
Điểm khác hoàn toàn dễ thấy nhất tại chỗ này khi so sánh quy mô MVP với quy mô MVC đó là vị trí cũng như tác dụng của tầng Presenter với View đối 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 dùng thay vì cả hai tầng View cùng tầng Controller trong mô hình MVC. Logic xử lý tương tác cũng giống như logic xử lý tài liệu hiển thị được tách ra trong tầng Presenter thay vày được gộp chung với chào đón tương tác trong Controller.
Tại sao thực hiện MVP?
Trong Android, có một sự việc phát sinh từ thực tiễn là những cơ chế xử lý can hệ trong apk được kết hợp nghiêm ngặt giữa giao diện người dùng và xử lý, truy vấn dữ liệu.
Một ví dụ nổi bật là CursorAdapter, đấy là sự kết hợp của việc định dạng tài liệu với xử lý can hệ giao diện. Đôi khi trong số đó còn bao hàm cả giải pháp xử lý dữ liệu ở tại mức sâu hơn (như cửa hàng với CSDL) thông qua Cursor.Việc kết hợp này có thể giúp bớt thiểu lượng code vào ứng dụng cũng giống như gộp các xử lý, lô ghích trong vận dụng vào cùng một nơi. Nhưng đối với một ứng dụng liên tiếp phát triển, hay một ứng dụng lớn, vấn đề này làm cho lượng code trên mỗi súc tích trở đề xuất 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 câu hỏi đọc hiểu, duy trì cũng như mở rộng.
Phân tầng, phân lớp ứng dụng có thể giảm đi hiệu năng do vận dụng cần thêm các tài nguyên, tuy thế tính khả gửi của áp dụng cũng tăng gấp những lần., bên cạnh đó còn không ngừng mở rộng khả năng có thể chấp nhận được kiểm thử từng phần của vận dụng trở nên thuận lợi hơn. Chính vì thế quan tâm đến giữa hiệu năng với tính thuận tiện mở rộng, duy trì là rất là quan trọng.
Trong Android, kiểm thử là một vấn đề trở ngại vì mọt liên kết ngặt nghèo giữa giao diện, xúc tích và ngắn gọn và dữ liệu. MVP bóc tách biệt giao diện khỏi dữ liệu, chia vận dụng ra thành tối thiểu ba lớp không giống nhau, trường đoản cú đó rất có thể kiểm test một các độc lập. Cùng với MVP ta hoàn toàn có thể kiểm thử đo đạc một biện pháp tối đa các logic của ứng dụng.
Triển khai MVP trên Android
Có rất nhiều biến thể cũng như cách thức triển khai MVP, tất cả mọi người hoàn toàn có thể điều chỉnh mô hình này tùy theo nhu cầu và giải pháp họ cảm thấy thoải mái và dễ chịu hơn. Các quy mô này, về cơ phiên bản khác nhau làm việc số lượng tác dụng mà tầng Presenter đảm nhận.
Một view thừa nhận tương tách bóc từ người dùng disable hoặc enable progress bar, liệu gồm nên giao trách nhiệm này cho 1 presenter? Một Activity đã nhận sự kiện click vào nút settings bên trên ActionBar giỏi sự khiếu nại này sẽ tiến hành một đối tượng người tiêu dùng presenter vào Activity đảm nhận?
Những thắc mắc như vậy tạo thành ra vô số cách thức để họ triển khai mô hình MVP, cùng trên thực tế chưa xuất hiện một tiêu chuẩn đúng mực nào được đưa ra. Vị vậy tiếp sau đây tôi xin trình diễn một vào những phương thức đó.
Tầng miêu tả - Presenter
Tầng biểu hiện có trọng trách như một middle-man giữa View với Model. Nó lấy dữ liệu từ Model, định dạng cùng trả về cho View. Mà lại không giống hệt 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 nói theo một cách khác nó hàm chứa lô ghích ứng dụng.
Tầng lô ghích dữ liệu - Model
Trong một vận dụng với thiết kế kiến trúc tốt, mô hình này vẫn chỉ là 1 trong gateway giữa tầng domain với tầng business logic. Trong quy mô Clean Architecture của Uncle Bob, model sẽ là 1 interactor thự thi một use case. Để 1-1 giản, nghỉ ngơi đây mã sản phẩm đơn thuần được nhìn nhận như một data source - cung ứng dữ liệu chúng ta muốn hiển thị trong đồ họa ứng dụng.
Xem thêm: Hnx Index Là Gì
Tầng giao diện - View
View, hay được implement vì một Activity (hoặc rất có thể là một Fragment, một View ... Tùy nằm trong vào cấu trúc ứng dụng), Activity này sẽ cất một thuộc tính là một lớp Presenter. Lý tưởng độc nhất vô nhị Presenter cần được cung cấp bởi một Dependency Injection framewok như Dagger, tuy vậy trong ngôi trường hợp ứng dụng không thực hiện một thư viện giỏi framework bởi vậy ta hoàn toàn rất 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 Login vào Android:
Lớp LoginActivity implements LoginView interface nhằm hiển thị kết quả tới fan dùng, mặt khác một ở trong tính LoginPresenter chịu trách nhiệm tiếp nhận và thực thi súc tích ứng dụng (ở đó là xác thực fan dùng) và trảpublic class LoginActivity extends Activity implements LoginView, View.OnClickListener { private ProgressBar progressBar; private EditText username; private EditText password; private LoginPresenter presenter;