Каков принцип шаблона проектирования в Android-разработке?

Я был разработчиком JaveEE. Недавно я присоединился к команде разработчиков Android. Структура Android смутила меня. Шаблон дизайна MVC, похоже, не подходит для разработки Android. Итак, каков принцип шаблона проектирования для разработки Android? Я имею в виду, есть ли какие-либо намеки о том, как написать чистый, простой и эффективный Android-код.

Solutions Collecting From Web of "Каков принцип шаблона проектирования в Android-разработке?"

Архитектура Android раздражала меня сначала, но я начинаю видеть метод их безумия. Это плохо объясняется документацией по Android. Моя самая большая проблема всегда заключалась в том, что трудно иметь централизованную модель данных с объектами, которые ваши действия разделяют, как обычное приложение. Android, похоже, хотел, чтобы я был кочевником, потому что я мог делиться примитивами между моими действиями. И отказ от мусора в базе данных НЕ является моделью, поскольку он не содержит поведения. Так как большинство людей, моя бизнес-логика, все заканчивается в моей деятельности, что затрудняет обмен бизнес-логикой в ​​других действиях.

Я пришел, чтобы узнать, что мне не хватает некоторых кусочков головоломки. Android – это MVC. Тем не менее, это связано с View довольно сильно.

  1. Активность == Контроллер
  2. Модель == Подкласс приложения
  3. Все, что подклассы View == View

Интересно, что вы можете создать подкласс приложения и объявить об этом в своем файле манифеста, и Android создаст один экземпляр этого объекта, который будет использовать длину вашего приложения независимо от того, какая активность была уничтожена или создана. Это означает, что вы можете создать там централизованную модель данных, к которой имеют доступ все действия.

То, как я вижу это, похоже на примитивный контейнер Spring, вы можете инициализировать объекты и разрешать зависимости между ними. Таким образом, вы можете отделить модельную часть своего приложения от самой деятельности. И просто попросите Activity вызвать вызовы модели и обработать обратные вызовы для получения результатов, чтобы он мог обновлять пользовательский интерфейс.

Проблемы с Android состоят в том, что он смешивает контроллер и просматривает довольно сильно. Например, подклассы типа TabActivity, ListActivity подразумевают использование определенного вида. Так что обмен мнениями довольно востребован. Кроме того, контроллер делает очень конкретные предположения о том, что представляет собой представление, даже если вы используете Activity. Он содержит прямые ссылки на объекты пользовательского интерфейса, такие как TextView и т. Д. И он регистрирует события низкого уровня, такие как клики, клавиатура и т. Д.

Было бы лучше, если бы активность могла регистрироваться для событий более высокого уровня, таких как «Вход», «Обновить баланс учетной записи» и т. Д., Которые будет отображать представление в ответ на ряд кликов, клавиатурных событий касания. Таким образом, контроллер работает на уровне, который вы могли бы описать, а не на конструктивных особенностях.

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

Действия, представления и действия в Android – это запекание в работе с Android UI и реализация шаблона model-view-viewmodel, который является структурно схожим (в том же семействе, что и) контроллер представления модели.

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

Вы можете найти MVC в следующем:

  • Вы определяете свой пользовательский интерфейс в различных файлах XML с помощью разрешения / аппаратного обеспечения и т. Д.
  • Вы определяете свои ресурсы в различных файлах XML по языку и т. Д.
  • Вы храните данные в SQLite или свои пользовательские данные в / assets / folder, читайте больше о ресурсах и активах
  • Вы распространяете кланы типа ListActivity , TabActivity и используете XML-файл надувщиками
  • Вы можете создать столько классов, сколько пожелаете для своей модели, и иметь свои собственные пакеты, которые будут действовать как структура
  • Много Utils уже написано для вас. DatabaseUtils, Html,

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

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

Если вы определяете свои представления и макеты в файлах xml, загрузите свои ресурсы из папки res, и если вы избежите более или менее смешать это в своем коде, то вы все равно следуете шаблону MVC.

Разработка Android – это прежде всего разработка графического интерфейса, которая, как Swing / AWT в Java, состоит из множества анонимных внутренних классов, реагирующих на события GUI. Его одна из вещей, которая действительно мешала мне делать много с Swing …. но у меня есть телефон Android, поэтому я собираюсь порезать зубы и просто пережить это, как многие из поклонников Apple сказали О проблемах с антенной. 😉

Android делает типичное решение сделать контроллер и просмотр одного класса. Это поощряет слишком многого в том же месте. Действие соответствует экрану, каждый вид которого относится к области экрана (иногда по всему экрану), каждый контроллер к жесту пользователю из этой области экрана, а модели – это просто модели, иногда подкрепленные службами из среды или какой-либо другой Сумасшедший набор функций полезности. Я использую Activity для координации одного или нескольких трио MVC. Это помогает решить проблему Android, чтобы просто бросить все в одном месте.

Я могу протестировать подавляющее большинство приложений для Android без запуска симулятора. Большая победа.

Извините за мой английский.

Android имеет очень хорошую модульность (Activities, Fragments, Views, Services и т. Д.). Поэтому в MVC нет необходимости.

Конечно, существует разделение на ввод данных (Activities, Fragments), логика, представление (xml или java) и данные (базы данных, файлы, предпочтения). Но это не MVC. Вы не должны пытаться использовать MVC, это только усложнит вашу архитектуру.

Вместо того, чтобы хранить что-то в глобальном масштабе, Android мотивирует вас держать объекты как можно глубже в своих областях (члены класса, локальные переменные) и передавать объекты в / из видов деятельности или фрагменты, используя Intents / Bundles. Это также связано с ограничением памяти.

Система может уничтожить вашу деятельность, если для работы переднего плана требуется больше ресурсов, поэтому система должна отключить фоновые процессы для восстановления памяти.

Таким образом, небезопасно хранить не константные (изменяемые) объекты как глобальные (статические) объекты. Обычно вы используете static для неизменяемых констант.

Проще говоря, вы отделяете свое приложение от экранов (Activities). Затем каждый экран – на фрагменты (фрагменты). Чтобы выполнить последовательность действий на экране, вы также можете отделить их, используя фрагменты ( пример ).

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

Мое впечатление, что модель программирования Android имеет много общего с MS WPF. Определения макета XML, код, который всегда связан с одним из этих определений … Итак, если вы спрашиваете о шаблонах проектирования, потому что хотите улучшить свои текущие или в проектах разработки Android, возможно, вам стоит взглянуть на методы и шаблоны WPF для улучшения Архитектуры, как MVVM.

Проверьте эти ссылки:

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Есть небольшой проект, который уже пытается схожим образом:

http://code.google.com/p/android-binding/

ура