2017-01-13 16 views
5

Я разрабатываю приложения для Android за несколько лет. Недавно я использовал MVP-архитектуру в своем приложении и после многократного прочтения и использования этого Android10 github repo.Вопросы по шаблону MVP для Android-приложений

Но есть несколько вопросов, которые у меня есть вокруг этой архитектуры MVP, которую я ищу. Пожалуйста, помогите мне понять их лучше.

1) Итак, у меня есть три модуля приложения, домена, данных. Какие ведущие модуля будут идти. В каком-то приложении у вас есть это в домене, но я видел, что некоторые другие библиотеки имеют его в модуле презентации или приложения, например, https://github.com/android10/Android-CleanArchitecture.

2) Могут ли предъявители иметь связанные с Android продукты, такие как намерения, контексты, общие ресурсы? Я не думаю, что это должно произойти.

3) Могут ли данные модуля разговора с приложением модуля и наоборот, или модуль приложения должен поговорить с модулем домена, который в перспективе выполняет вещи на модуле данных

4) Как я могу сделать социальный логин как Facebook с архитектурой MVP ... любая идея или ссылка для объяснения? Я сделал это в поле ниже образом:

активность: onFBButtonClick() ->presenter.onButtonClick() ->FacebookLoginManager.registerCallback

После этого я сразу получить обратный вызов от моей деятельности на onActivityResult(int requestcode, int resultcode, Intent intent). Теперь согласно fb sdk tutorial я должен позвонить FbCallbackManager.onActivityResult(with all the params). Но я не могу передать эту информацию в презентаторе, поскольку ведущий не должен знать о намерении (Platform Specific). Как я могу позвонить FbcallbackManager.onActivity()?

+1

2) Намерение - это действительно фреймворк Android - должно быть в V части MVP. Контекст - должен быть достигнут путем инъекции зависимостей, когда вам это нужно, я избегаю его в Presenter. SharedPrefs то же самое - они строго связаны с конкретным UseCase (или Interactor, что бы вы ни называли). UseCase использует репозитории для данных, а SharedPrefs может быть таким репозиторием для инъекций. Отметьте ответ donnfelker: https://www.reddit.com/r/androiddev/comments/35vgw7/in_an_mvp_architecture_where_would_accessing_the/?sort=top Лично я бы не использовал UseCase для простого презентатора. Используйте репозиторий прямо. – Przemo

+0

@Przemo Что я понимаю из v part is View ... Активность, фрагменты. Я не думаю, что мы можем реализовать Intents как View. Любой способ для ответа. – anshul

+0

Yep, V - часть фреймворка Android (действия, представления, фрагменты). Я имел в виду, что в основе View часть должна быть включена информация о намерениях, например, запуск новой активности, IntentFilters, BroadcastReceivers, Services и т. Д. На самом деле это не вид, это Контроллер. Но в MVP View на самом деле View + simple Controller с вещами, которые я только что сказал, нажмите прослушиватели и т. Д. – Przemo

ответ

2

Существует множество подходов к реализации MVP в Android.

Большинство подходов, которые я видел, обозначают Activity/Fragment как вид MVP. Первоначально это кажется естественным, но слишком много вопросов и вопросов возникает, когда вы пытаетесь применить эту схему к нетривиальным приложениям.

После того, как я исследовал многие подходы MVP (включая те, которые вы связали), я пришел к выводу, что ни один из действий без фрагмента не должен быть MVC-представлениями.

Подробное объяснение этой претензии приведено здесь: Why Activities are not UI Elements.

Следуя этой линии зрения, я предложил другую реализацию MVP для приложений для Android: MVP and MVC Architectures in Android.

Что касается ваших вопросов:

  1. Presenter является частью "экрана"
  2. Зависит от MVP подход вы выбираете. Я лично считаю, что докладчиками являются «Действия и фрагменты», поэтому они могут иметь зависимости от компонентов Android.
  3. Я думаю, что на этот вопрос может ответить только автор этого git-репо.
  4. Если вы принимаете мышление Activity/Fragment, являющегося ведущими, вы сразу поймете, как это сделать, не загрязняя MVP-представления.

Кроме того, что касается интеграции FB, см. Мой ответ here.

+0

Большое спасибо за ответ. Я перейду по ссылкам и вернусь с вопросом, если – anshul