Подтвердить что ты не робот

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

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

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

Некоторые люди предложили использовать MVVM - http://vladnevzorov.com/2011/04/30/android-application-architecture-part-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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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


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

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

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

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

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

Нейминг

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

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

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

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

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

Общие

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