2015-12-28 19 views
7

Tôi cố gắng hiểu cách tốt nhất là lập trình ứng dụng Android "sạch". Tôi tìm thấy một thú vị article về nó, nơi họ sử dụng một loại kiến ​​trúc 3 lớp.Giải thích MVP của Android

Bây giờ tôi đọc android sử dụng mẫu thiết kế MVP và cố gắng hiểu điều này. Con đường tôi hiểu được những nguyên tắc MVP (trong bối cảnh android) là:

  • lớp mẫu là các lớp Logic
  • người dẫn chương trình là các lớp được "liên kết" với một XML (các hoạt động)
  • chế độ xem thụ động là của XML.

Điều này có đúng không?

Khi điều này là đúng, là nó sau đó cũng đúng rằng mô hình 3 lớp nằm vừa gọn trong nguyên tắc MVP vì:

  1. các lớp trình bày từ các kiến ​​trúc 3 lớp phù hợp trong lớp dẫn chương trình của MVP
  2. Doanh nghiệp và lớp dữ liệu từ kiến ​​trúc 3 lớp phù hợp hoàn hảo trong phần mô hình của MVP?

Tôi hy vọng câu hỏi của tôi rõ ràng vì đó là một chủ đề phức tạp đối với tôi.

Có thể điều này làm sáng tỏ tầm nhìn của tôi (cách suy nghĩ) về điều này ... Maybe this clears up my vision about this...

+0

Tôi sẽ không nói MVP hoạt động hoàn hảo cho ứng dụng * mọi * của android. Nó phụ thuộc hoàn toàn vào những gì bạn muốn làm. Tôi đã sử dụng MVP cho ứng dụng android của riêng mình và tôi nghĩ rằng nó làm sạch mã rất nhiều, từ việc có phần lớn mã trong Hoạt động và Phân đoạn của bạn. Điều đó đang được nói, có một cuộc nói chuyện thú vị từ Yigit - https://www.youtube.com/watch?v=BlkJzgjzL0c mà dường như không sử dụng MVP. Một bài viết thú vị khác có thể tìm thấy ở đây về MVP: https://medium.com/ribot-labs/android-application-architecture-8b6e34acda65 – riggaroo

+0

Cảm ơn, tôi sẽ xem video vào ngày mai. Nhưng bạn có biết nếu những gì tôi đã viết về MVP là chính xác? – RoDo

+0

Một ví dụ thực sự khác về việc sử dụng MVP có thể tìm thấy ở đây: https://codelabs.developers.google.com/codelabs/android-testing/index.html?index=..%2F..%2Findex#0. Điều này mô tả cách triển khai MVP. Tôi sẽ nói View là Activity/Fragment, người trình bày là một lớp riêng biệt thực hiện các hành động trên khung nhìn và mô hình là các POJO liên quan đến khung nhìn. – riggaroo

Trả lời

9

điều đầu tiên tôi muốn làm rõ là MVP hoặc bất kỳ mẫu nào khác cho vấn đề đó không có gì cụ thể của Android dev và có thể áp dụng cho bất kỳ khung công tác nào khác.

Tôi nghĩ rằng bạn đã nhận được ý chính của nó:

  • xem thường được thực hiện bởi các hoạt động và các mảnh vỡ và sẽ chứa các tham chiếu đến người dẫn chương trình
  • người dẫn chương trình là người đàn ông trung giữa quan điểm và mô hình. Lấy dữ liệu từ mô hình và trả về dữ liệu đã được định dạng cho khung nhìn để nó không cần phải làm gì khác ngoài việc hiển thị nó.
  • mô hình có thể được nhìn thấy một cách đơn giản như "nhà cung cấp dữ liệu". Nó có thể phức tạp như bạn muốn, bằng cách sử dụng db nội bộ, rất nhiều dòng, v.v.

Nếu bạn quan tâm đến kiến ​​trúc ứng dụng Android, tôi đề nghị bạn xem bài nói chuyện này được đưa ra tại hội nghị thượng đỉnh Android năm nay. Nó là một trong những bests Tôi đã nhìn thấy

https://www.youtube.com/watch?v=BlkJzgjzL0c

+0

Cảm ơn, điều này giải thích rất nhiều cho tôi và tôi nghĩ tầm nhìn của tôi về MVP trong trường hợp Android là đúng. Bây giờ tôi sẽ tò mò nếu sự liên kết của tôi với kiến ​​trúc 3 lớp cũng đúng. – RoDo

1

Mặc dù câu hỏi này có một câu trả lời, tôi không nghĩ rằng câu trả lời này là hoàn toàn bởi bất kỳ phương tiện.

MVP là một khái niệm chung có thể có nhiều triển khai khác nhau, một số khác biệt đáng kể. Hơn nữa, khái niệm chính nó là rất mơ hồ - những người khác nhau có thể có những khái niệm khác nhau trong tâm trí khi họ nói MVP.Một trong những phổ biến nhất được hiển thị trong hình dưới đây:

enter image description here

Bất kể thực hiện, các định nghĩa chung của thành phần MVP là:

  • mẫu: trừu tượng của "lưu trữ trạng thái ứng dụng". Định nghĩa về "trạng thái" là gì và cách nó được lưu trữ là các chi tiết thực hiện. Triển khai mô hình không nên phụ thuộc vào Chế độ xem hoặc Người trình bày.
  • Chế độ xem: trừu tượng hóa "giao diện người dùng". Định nghĩa về "người dùng" là ai và cách nó tương tác với Chế độ xem là chi tiết triển khai. Xem triển khai không nên có sự phụ thuộc vào Mô hình hoặc Người trình bày.
  • Người trình bày: đóng gói logic kinh doanh của ứng dụng. Presenter xử lý các sự kiện đầu vào của người dùng nhận được từ khung nhìn, và thay đổi trạng thái của ứng dụng được lưu trữ trong mô hình để đáp ứng. Presenter cũng xử lý các thay đổi của trạng thái của ứng dụng được lưu trữ trong mô hình và các khung nhìn cập nhật để đáp ứng. Người trình bày thường phụ thuộc vào cả Chế độ xem và Mô hình.

Nếu bạn cần biết thêm thông tin về MVP trong bối cảnh phát triển Android, bạn có thể tìm thấy nó trong bài này: MVP and MVC Architectural Patterns in Android

0

Như các bạn đã đến để nhận biết căn bản về sạch Architechure. Ví dụ sau đây mô tả cách thực hiện mô hình MVP thực tế của bạn.

Ví dụ:

interface BaseContract { 
     interface BaseView { 
      //Methods for View 
      void onDoSomething(); 
     } 

     interface BasePresenter { 
      void doSomething(); 

     } 
    } 

    class BaseMainPresenter implements BaseContract.BasePresenter { 
     BaseContract.BaseView view; 

     BaseMainPresenter(BaseContract.BaseView view) { 
      this.view = view; 
     } 

     @Override 
     public void doSomething() { 
      if (view != null) 
       view.onDoSomething(); 
     } 
    } 

    class DemoClass implements BaseContract.BaseView { 

     //Create object of Presenter 

     /**** 
     * Example : 
     * BaseMainPresenter baseMainPresenter = new BaseMainPresenter(this); 
     */ 
     @Override 
     public void onDoSomething() { 
      //Deal with Context here. 
     } 
    } 

Tham khảo bên dưới liên kết để thực hiện thực tế mẫu với kịch bản & tìm hiểu thêm về sạch Architechure: https://github.com/android10/Android-CleanArchitecture

0

Ở đây trên github https://github.com/saksham24/Android-Firebase-Mvp-Mvc-Mvvm-chat tôi đã làm một repo chứa 3 ứng dụng với nhiều chức năng giống nhưng được viết bằng 3 mẫu Android khác nhau (Mvc, Mvp, Mvvm)

Hiểu t Mô hình khác nhau khá dễ dàng nếu chúng ta có một ví dụ đơn giản về chúng vì vậy tôi đã tạo một repo để đóng góp kiến ​​thức của mình cho cộng đồng nhà phát triển này. Ngoài ra kho lưu trữ được viết bằng cách sử dụng các hướng dẫn và quy ước java thích hợp (bao gồm đặt tên và gói, mô-đun) để mọi người tìm kiếm dự án như vậy cũng có thể xem kho lưu trữ này.

tại

  1. nếu bạn muốn biết sự khác biệt giữa android MVP, MVC, MVVM xem giải thích điều này bằng cách giới https://academy.realm.io/posts/eric-maxwell-mvc-mvp-and-mvvm-on-android/

  2. nếu bạn muốn so sánh ba mẫu thấy ngạc blog đầy đủ này https://thinkmobiles.com/blog/mvp-vs-mvvm-android-patterns/