2017-01-13 19 views
5

Tôi đã phát triển các ứng dụng Android trong vài năm. Gần đây tôi đã sử dụng kiến ​​trúc MVP trong ứng dụng của tôi và sau khi đọc qua rất nhiều và sử dụng Android10 repo github này.Câu hỏi về Mô hình MVP cho các ứng dụng Android

Nhưng có một vài câu hỏi tôi có xung quanh kiến ​​trúc MVP mà tôi đang tìm kiếm. Xin hãy giúp tôi hiểu những điều này tốt hơn.

1) Vì vậy, tôi có ba ứng dụng mô-đun, tên miền, dữ liệu. Những người thuyết trình mô-đun sẽ đi. Trong một số ứng dụng, chúng có trong miền nhưng tôi thấy một số thư viện khác có trong thư viện hoặc mô-đun ứng dụng như thế này https://github.com/android10/Android-CleanArchitecture.

2) Người thuyết trình có thể có các nội dung liên quan đến Android như Intents, Contexts, SharedPrefs ets không? Tôi không nghĩ điều này sẽ xảy ra.

3) có thể dữ liệu mô đun nói chuyện với module ứng dụng và ngược lại Hoặc mô-đun ứng dụng nên nói chuyện với mô-đun miền mà trong nhiệm kỳ thực hiện những điều trên module dữ liệu

4) Làm thế nào tôi có thể làm đăng nhập xã hội như Facebook với kiến ​​trúc MVP ... bất kỳ ý tưởng hay liên kết nào để giải thích? Tôi đã làm điều đó một cách dưới đây:

Hoạt động: onFBButtonClick() ->presenter.onButtonClick() ->FacebookLoginManager.registerCallback

Sau này tôi trực tiếp nhận được một cuộc gọi lại về hoạt động của tôi trên onActivityResult(int requestcode, int resultcode, Intent intent). Bây giờ theo hướng dẫn fb sdk tôi phải gọi FbCallbackManager.onActivityResult(with all the params). Nhưng tôi không thể vượt qua những thông tin này trong thuyết trình như người trình bày không nên biết về ý định (Platform cụ thể) điều. Làm thế nào tôi có thể gọi FbcallbackManager.onActivity()?

+1

2) Ý định thực sự là điều nền tảng Android - phải nằm trong phần V của MVP. Ngữ cảnh - có thể đạt được bởi Dependency Injection bất cứ khi nào bạn cần, tôi tránh nó trong Presenter. SharedPrefs giống nhau - chúng liên quan chặt chẽ đến UseCase cụ thể (hoặc Interactor, bất kể bạn đặt tên nó là gì). UseCase sử dụng Repositories cho dữ liệu và SharedPrefs có thể là Repository được tiêm như vậy. Kiểm tra phản hồi của donnfelker: https://www.reddit.com/r/androiddev/comments/35vgw7/in_an_mvp_architecture_where_would_accessing_the/?sort=top Cá nhân, tôi sẽ không sử dụng UseCase cho Trình bày đơn giản. Sử dụng Repository thẳng. – Przemo

+0

@Przemo Những gì tôi hiểu từ v phần là Xem ... Hoạt động, các mảnh vỡ. Tôi không nghĩ rằng cách chúng ta có thể thực hiện Intents như View. Bất kỳ cách nào cảm ơn bạn đã trả lời. – anshul

+0

Yep, V là phần khung làm việc của Android (Hoạt động, Chế độ xem, Phân đoạn. Tôi có nghĩa là nội dung có liên quan đến ý định, như bắt đầu Hoạt động mới, IntentFilters, BroadcastReceivers, Dịch vụ, v.v ... sẽ được quản lý trong phần Xem. Nhưng trong MVP View thực sự là View + simple Controller với những thứ tôi vừa nói, click listeners… – Przemo

Trả lời

2

Có nhiều cách tiếp cận để triển khai MVP trong Android.

Hầu hết các phương pháp tôi đã thấy Hoạt động/Phân đoạn được chỉ định dưới dạng chế độ xem MVP. Điều này có vẻ tự nhiên ban đầu, nhưng quá nhiều vấn đề và câu hỏi đặt ra khi bạn cố gắng áp dụng lược đồ này cho một ứng dụng không tầm thường.

Sau khi tôi điều tra nhiều cách tiếp cận MVP (bao gồm các phương pháp bạn đã liên kết), tôi đã đi đến kết luận rằng không Hoạt động không phân đoạn nào phải là chế độ xem MVC.

Lý do chi tiết đằng sau yêu cầu này được tóm tắt tại đây: Why Activities are not UI Elements.

Theo đường ngắm này, tôi đã đề xuất một triển khai MVP khác cho ứng dụng android: MVP and MVC Architectures in Android.

Đối với câu hỏi của bạn:

  1. Presenter là một phần của "màn hình"
  2. Phụ thuộc vào đó MVP phương pháp mà bạn chọn. Cá nhân tôi nghĩ rằng người thuyết trình là Hoạt động và Phân đoạn, do đó họ có thể có sự phụ thuộc vào các thành phần của Android.
  3. Tôi nghĩ rằng chỉ tác giả của git repo mới có thể trả lời câu hỏi này.
  4. Nếu bạn áp dụng tư duy Hoạt động/Phân đoạn là người trình bày, bạn sẽ ngay lập tức hiểu cách thực hiện mà không gây ô nhiễm lượt xem MVP.

Ngoài ra, đối với tích hợp FB, vui lòng xem câu trả lời của tôi here.

+0

Cảm ơn rất nhiều vì đã trả lời. Tôi sẽ đi qua các liên kết và quay trở lại với câu hỏi nếu có – anshul

Các vấn đề liên quan