Архитектура Android-приложений – MVVM или MVC?

У меня есть проект Android, над которым я начинаю работать, и я хочу, чтобы его структура была максимально надежной.

Я прихожу из фона MVVM WPF, и я немного читал об архитектуре приложений Android, но я просто не мог найти прямой ответ на вопрос о том, какую архитектуру я должен использовать.

Некоторые люди предложили использовать MVVM – http://vladnevzorov.com/2011/04/30/android-application-architecture-parti-ii-architectural-styles-and-patterns/

И другие предложили использовать MVC, но не указали, как именно это должно быть реализовано.

Как я уже сказал, я исхожу из фона WPF-MVVM, и поэтому я знаю, что он сильно зависит от привязок, которые, насколько я понимаю, не поддерживаются по умолчанию в Android.

Похоже, есть стороннее решение – http://code.google.com/p/android-binding/ Но я не знаю, хочу ли я на это положиться. Что, если его развитие остановится, и оно не будет поддерживаться будущими API и т. Д.

В основном я ищу тщательный учебник, который научит меня лучшим практикам для построения структуры приложения. Структура папок и классов и т. Д. Я просто не мог найти подробного учебника, и я бы ожидал, что Google предоставит такой учебник для своих разработчиков. Я просто не думаю, что такая документация достаточно хорошо обрабатывает технический аспект – http://developer.android.com/guide/topics/fundamentals.html

Надеюсь, я был достаточно ясным и что я не прошу слишком много, я просто хочу быть уверенным в структуре моего приложения, прежде чем мой код превратится в монстра-спагетти.

Благодаря!

Прежде всего, Android не заставляет вас использовать какую-либо архитектуру. Не только это, но и несколько затрудняет попытку следовать любому. Это потребует от вас умного разработчика, чтобы избежать создания кодовой базы спагетти 🙂

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

О шаблонах, которые вы знаете, позвольте мне сделать что-то не так: я буду смешивать три разных шаблона, чтобы вы почувствовали, что делает что-то в android. Я считаю, что Presenter / ModelView должен быть где-то в Фрагменте или Деятельности. Адаптеры иногда могут выполнять эту работу, поскольку они заботятся о входах в списки. Вероятно, действия должны работать как контроллеры. Модели должны быть обычными java-файлами, тогда как представление должно содержать ресурсы макета и некоторые пользовательские компоненты, которые могут потребоваться реализовать.


Я могу дать вам несколько советов. Это ответ на вики сообщества, поэтому, надеюсь, другие люди могут включить другие предложения.

Организация файлов

Я думаю, что в основном есть две разумные возможности:

  • Организовать все по типу – создать папку для всех действий, другую папку для всех адаптеров, другую папку для всех фрагментов и т. Д.
  • Организовать все по домену (возможно, не лучшее слово). Это означало бы, что все, что связано с «ViewPost», будет находиться внутри одной папки – активности, фрагмента, адаптеров и т. Д. Все, что связано с «ViewPost», будет в другой папке. То же самое для «EditPost» и т. Д. Я предполагаю, что действия будут определять папки, которые вы создали, а затем для базовых классов, например, будет несколько более общих.

Лично я участвовал в проектах, используя первый подход, но я действительно хотел бы попробовать позже, поскольку я считаю, что это могло бы сделать вещи более организованными. Я не вижу преимущества в наличии папки с 30 несвязанными файлами, но это то, что я получаю с первым подходом.

Именование

  • При создании макетов и стилей всегда указывайте (или идентифицируйте их) с помощью префикса для активности (/ фрагмента), где они используются.

Таким образом, все строки, стили, идентификаторы, используемые в контексте «ViewPost», должны начинаться с «@ id / view_post_heading» (например, для текстового вида), «@ style / view_post_heading_style», «@ string / view_post_greeting».

Это позволит оптимизировать автозаполнение, организацию, избежать группировки имен и т. Д.

Базовые классы

Я думаю, вы захотите использовать базовые классы для почти всего, что вы делаете: адаптеры, действия, фрагменты, службы и т. Д. Они могут быть полезны хотя бы для целей отладки, чтобы вы знали, какие события происходят во всей вашей деятельности.

Генеральная

  • Я никогда не использую анонимные классы – они уродливы и будут отвлекать ваше внимание, когда вы пытаетесь прочитать код
  • Иногда я предпочитаю использовать внутренние классы (по сравнению с созданием выделенного класса) – если класс не будет использоваться где-либо еще (и он небольшой), я думаю, что это очень удобно.
  • Подумайте о своей системе регистрации с самого начала – вы можете использовать систему регистрации Android, но хорошо ее используете!
Intereting Posts
Убедитесь, что у вас запущен эмулятор Android или подключено устройство. Включите / выключите светодиодный индикатор камеры / вспышку в Samsung Galaxy Ace 2.2.1 и вкладке Galaxy Дать прокладку с помощью setPadding с модулем dip unit not px J2ME VS Android VS iPhone VS Symbian VS Windows CE Граница только с левой стороны кнопки Получайте день, месяц и год отдельно, используя SimpleDateFormat Начать таймер при нажатии кнопки Как читать произвольный XML в универсальный объект в Android? NullPointerException: попытка вызвать виртуальный метод 'int java.util.ArrayList.size ()' для ссылки на нулевой объект Выпадающий список Spinner и проблема изменения ориентации экрана Как читать изображение с определенного URL-адреса в андроиде Отправьте строку C ++ на Java через JNI Как воспроизвести звук, когда экран заблокирован на Android в React Native? Android: Получение URI файла из URI контента? Android получает прикрепленное имя файла из приложения gmail