Intereting Posts
Как использовать кеширование диска в Picasso? Не удалось загрузить обновленный APK в Google Play Store Сервер ByetHost, передающий значения html «Проверка вашего браузера» с помощью JSON String Как запустить одну и ту же асинтету более одного раза? Ориентация камеры Android ISsue Проверьте, нет ли базы данных Связывание приложения с форматом Epub SetOnItemClickListener не отвечает за пользовательский ListView Фрагмент или фрагмент – Вложенные фрагменты против действий. Почему я должен использовать более одного действия? Определить, существует ли активность на текущем устройстве? Разметка XML-таблицы? Две строки EQUAL-width, заполненные кнопками одинаковой ширины? Приложение для Android перезапускается при открытии, нажав значок приложения Android-клавиатура Не удается обновить событие в календаре телефона от кода Использование .aar NoClassDefFoundError Но класс существует и находится в Dexed

Трудности с использованием Model-View-Presenter в Android

Model-View-Presenter (MVP) является хорошо известным шаблоном проектирования для графических приложений. Для Android реализация бизнес-логики в простом Java-модуле облегчает тестирование без необходимости использования эмулятора Android.

Однако у меня возникают трудности с внедрением шаблона на Android из-за особых требований к графическому интерфейсу приложений для Android:

Я прочитал сообщение в блоге MVP для Android и посмотрел пример исходного кода . Конечной целью, которую я пытаюсь достичь с помощью шаблона MVP, является возможность перевести всю бизнес-логику на Objective-C с помощью transpiler j2objc , чтобы бизнес-логику можно было повторно использовать при реализации того же приложения в iOS.

Есть ли кто-нибудь, кто успешно реализовал шаблон MVP для Android, и в этом случае, что мне не хватает?

Solutions Collecting From Web of "Трудности с использованием Model-View-Presenter в Android"

Я предлагаю реализовать компонент MVP без привлечения Activity, возможно, концептуально думая о том, что было бы полезно как для Android, так и для GWT. Создайте компонент с помощью тестовой разработки с помощью посмеянного интерфейса View, добавив тесты, пока бизнес-логика не будет полностью реализована и проверена. TDD помогает поддерживать API-интерфейс компонента (зачем писать тесты на то, что вам не нужно?), Что упрощает перенос компонента.

Описанные требования к деятельности могут быть обобщены как независимые от платформы: компонент должен быть сериализуемым (малым, а не сериализацией Java) и должен принимать события состояния жизненного цикла. Те же могут быть полностью протестированы с использованием mocks для системных функций. По мере прохождения этого шага вы, вероятно, заметите, что некоторые из требований Activity обязательно зависят от Android и могут быть полезны на других платформах. Избегайте создания огромных сервисных API; Для поддержки сериализации, например, все, что необходимо, это методы хранения / загрузки, а не что-то вроде API-интерфейса Parcel . Я нашел описание таких сервисных API другому разработчику на доске, чтобы стать отличным способом найти ненужный пух.

Затем портируйте компонент на Android, возможно, создав Activity, который делегирует компоненту и предоставляет классы реализации Android для издевающихся интерфейсов. Все должно «работать» в первый раз, но на самом деле некоторые требования могут быть упущены, поэтому добавьте их в независимую от платформы часть и повторите.

Когда вы будете готовы к подключению к iOS, переопределите те ранее издевавшиеся интерфейсы. Если эти интерфейсы бывают скудными, их, вероятно, будет проще создавать непосредственно в Objective-C, импортируя заголовки протокола, сгенерированные j2objc. Например, класс NSDictionaryMap j2objc реализует java.util.Map с реализацией NSDictionary – нет необходимости писать и переводить версию Java с момента ее использования только API-интерфейсов iOS.

Я нахожу, что вариант MVP Android построен вокруг – это шаг в правильном направлении для изоляции бизнес-логики в приложении. Однако, если вы хотите добиться лучшего разделения проблем и, как результат, более многократно используемого домена / бизнес-логики, я рекомендую использовать шаблон Presenter First (который вы кратко упомянете о себе в комментарии). Помимо уменьшения связи, он хорошо поддается TDD и позволяет вам тестировать всю вашу бизнес-логику.

Недавно я начал репо с GitHub с примерами Presenter First для Android. Из-за сложности архитектуры Android не так просто реализовать шаблон. Представления, как правило, «более толстые», чем то, что кажется приемлемым в обычном приложении Presenter First, в основном из-за жизненного цикла деятельности и других странностей, как вы упоминаете сами. Я сделал все возможное, чтобы отделить бизнес-логику от платформы, но есть определенная возможность для улучшения. Вы можете найти примеры:

http://github.com/olerass/presenter-first-android

Может быть, вы можете использовать некоторые идеи оттуда? Или даже лучше внести свой вклад.