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



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



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



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



EDIT



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

697   12  

12 ответов:

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

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

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

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

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

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

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

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

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

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

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

попробовать его. Я лично считаю, что он отлично подходит для разработки Android.

этот ответ был обновлен, чтобы оставаться актуальными по состоянию на ноябрь 2016


похоже, что вы ищете архитектурные шаблоны, а не шаблоны проектирования.

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

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

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

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

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

Enter image description here


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

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

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

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

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


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

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

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

В Android framework используются различные шаблоны, такие как:

  • широковещательный приемник использует шаблон наблюдателя
  • вызов удаленной службы использует шаблон Прокси
  • просмотр и просмотр группы использует композитный шаблон
  • Media framework использует шаблон фасада

enter image description here

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

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

  • некоторые полезные ссылки для ссылка:

https://www.raywenderlich.com/109843/common-design-patterns-for-android

code.tutsplus.com/articles/introduction-to-android-design-patterns--cms-20808

https://en.wikipedia.org/wiki/Design_Patterns

вот отличная статья о общие шаблоны проектирования для Android:

Creational patterns:

  • Builder (например AlertDialog.Строитель)
  • внедрение зависимостей (например,Кинжал 2)
  • Синглтон

структурные модели:

  • адаптер (например,RecyclerView.Адаптер)
  • фасад (напр. модернизация)

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

    (например,EventBus)
  • наблюдатель (например,RxAndroid)
  • Модель-Представление-Контроллер
  • Модель-Представление-Модель Представления ( похоже на шаблон MVC выше)

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

1) держатель вида использует одноэлементный шаблон дизайна

2) намерение использует шаблон дизайна фабрики

3) адаптер использует шаблон дизайна адаптера

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

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

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

на уведомления случае NotificationCompat.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);

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

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

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

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

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

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

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

Я хотел бы добавить шаблон дизайна, который был применен в Android Framework. Это половина синхронизации половина асинхронного шаблона, используемого в реализации Asynctask. Смотрите мое обсуждение на

https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing

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

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

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

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

Comments

    Ничего не найдено.