Какие шаблоны дизайна используются на Android?

Я занимаюсь небольшим исследованием мобильных платформ, и мне хотелось бы узнать, какие шаблоны дизайна используются в Android?

например. в iOS Model-view-controller очень широко используется вместе с делегированием и другими шаблонами.

Какие шаблоны и где, в частности, используется Android?

ИЗМЕНИТЬ

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

Ответ 1

Я попытался использовать модель-view-controller (MVC) и model-view-presenter для разработки Android. Мои результаты - это модель-контроллер-просмотр, отлично работает, но есть пара "проблем". Все сводится к тому, как вы воспринимаете класс Android Activity. Это контроллер, или это вид?

Фактический класс Activity не расширяет класс Android View, но он, однако, обрабатывает отображение окна пользователю, а также обрабатывает события этого окна (onCreate, onPause и т.д.).

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

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

Из-за этого я лично считаю, что шаблон model-view-presenter идеально подходит для разработки Android. Поскольку роль представления в этом шаблоне:

  • Обслуживание в качестве точки входа
  • Компоненты рендеринга
  • Маршрутизация событий пользователя ведущему

Это позволяет реализовать вашу модель следующим образом:

Просмотр - это содержит компоненты вашего пользовательского интерфейса и обрабатывает события для них.

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

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

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

Попробуйте. Я лично считаю, что это отлично подходит для разработки Android.

Ответ 2

Обновление ноябрь 2018

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

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

Этот ответ был обновлен, чтобы оставаться актуальным с ноября 2016 года


Похоже, вы ищете архитектурные шаблоны, а не дизайнерские шаблоны.

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

Поскольку приложения для Android (и большая часть AOSP) написаны на Java, которая является объектно-ориентированной, я думаю, вам будет сложно найти единый шаблон проектирования ООП, который НЕ используется в Android.

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

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

Поскольку вы упомянули MVC в своем вопросе, я думаю, что архитектурные шаблоны - это то, что вы ищете.

Enter image description here


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

Но сегодня ситуация иная - Google недавно выпустила библиотеку Data Binding, которая полностью интегрирована с Android Studio, и даже развернула набор архитектурных чертежей для приложений Android.

Два года назад было очень сложно найти информацию о MVC или MVP на Android. Сегодня MVC, MVP и MVVM стали "модными словами" в сообществе Android, и нас окружают бесчисленные эксперты, которые постоянно пытаются убедить нас в том, что MVx лучше, чем MVy. На мой взгляд, обсуждать, является ли MVx лучше, чем MVy, совершенно бессмысленно, потому что сами термины очень неоднозначны - просто посмотрите на ответы на этот вопрос, и вы поймете, что разные люди могут ассоциировать эти сокращения с совершенно разными конструкциями.

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

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


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

Этот MVC не просто косметически отличается от других - он основан на теории, что Activity в Android не являются элементами пользовательского интерфейса, что имеет огромное значение для организации кода.

Итак, если вы ищете хороший архитектурный шаблон для приложений Android, который следует принципам SOLID, вы можете найти его описание в моем посте об архитектурных шаблонах MVC и MVP в Android.

Ответ 3

В системе Android существуют различные шаблоны, например:

  • Широковещательный приемник использует шаблон Observer
  • В вызове службы Remoter используется шаблон прокси-сервера
  • Просмотр и просмотр группы использует композитный шаблон
  • Медиа-каркас использует шаблон фасада

Ответ 4

enter image description here

Когда я дошел до этого поста, это действительно помогло мне понять шаблоны с примером, поэтому я сделал таблицу ниже, чтобы ясно увидеть шаблоны проектирования и их пример в Android Framework

Я надеюсь, что вы найдете это полезным.

Ответ 5

Вот отличная статья о общих шаблонах дизайна для Android:

Шаблоны создания:

  • Builder (например, AlertDialog.Builder)
  • Инъекция зависимостей (например, кинжал 2)
  • Singleton

Структурные шаблоны:

  • Адаптер (например, RecyclerView.Adapter)
  • Фасад (например, дооснащение)

Поведенческие модели:

  • Команда (например, EventBus)
  • Наблюдатель (например, RxAndroid)
  • Контроллер просмотра модели
  • Вид модели ViewModel (аналогично шаблону MVC выше)

Ответ 6

В следующих классах Android используются шаблоны проектирования

1) View Holder использует шаблон проектирования Singleton

2) Intent использует Factory Design Pattern

3) Адаптер использует шаблон проектирования адаптера

4) Широковещательный приемник использует шаблон проектирования наблюдателя

5) View использует композитный шаблон дизайна

6) Media FrameWork использует шаблон оформления фасада

Ответ 7

В случае Notifications NotificationCompat.Builder использует шаблон Builder

как

mBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_stat_notification)
                    .setContentTitle(getString(R.string.notification))
                    .setContentText(getString(R.string.ping))
                    .setDefaults(Notification.DEFAULT_ALL);

Ответ 8

Android также использует шаблон дизайна ViewHolder.

Он использовался для повышения производительности ListView при прокрутке его.

Шаблон проектирования ViewHolder позволяет получить доступ к каждому элементу списка элементов без необходимости поиска, экономя ценные циклы процессора. В частности, это позволяет избежать частых вызовов findViewById() во время прокрутки ListView, и это сделает его гладким.

Ответ 9

Все эти шаблоны, MVC, MVVM, MVP и Presentation Model, можно применять к приложениям Android, но без сторонней структуры не легко получить хорошо организованную структуру и чистый код.

MVVM создается из PresentationModel. Когда мы применяем MVC, MVVM и Модель презентации к Android-приложению мы действительно хотим иметь четкий структурированный проект и, что более важно, для модульных тестов.

На данный момент, без сторонней структуры, у вас обычно есть много кода (например, addXXListener(), findViewById() и т.д.), который не добавляет никакого бизнес-значения. Что еще нужно, вы должны запускать тесты для Android, а не обычные тесты JUnit, которые требуют времени для запуска и делают блок-тесты несколько непрактичными.

По этим причинам несколько лет назад мы начали проект с открытым исходным кодом, RoboBinding - структура модели Presentation-binding для модели Android-платформа. RoboBinding помогает вам писать код пользовательского интерфейса, который легче читать, тестировать и поддерживать. RoboBinding устраняет необходимость ненужного кода, такого как addXXListener или так, и переносит логику пользовательского интерфейса на модель представления, которая является POJO и может быть протестирован с помощью обычных тестов JUnit. RoboBinding поставляется с более чем 300 тестов JUnit для обеспечения его качества.

Ответ 11

В Android шаблон шаблона "рабочая очередь" обычно используется для выгрузки задач из основного потока приложения.

Пример: дизайн класса IntentService.

IntentService получает Intents, запускает рабочий поток и останавливает службу по мере необходимости. Все запросы обрабатываются на одном рабочем потоке.

Ответ 12

Binder использует "шаблон наблюдателя" для уведомлений получателя смерти.