Я провожу небольшое исследование мобильных платформ и хотел бы знать, какие шаблоны дизайна используются в Android?
Например, в iOS Model-view-controller очень широко используется вместе с делегированием и другими шаблонами.
Какие шаблоны и где конкретно использует Android?
РЕДАКТИРОВАТЬ
Я не спрашиваю о шаблонах проектирования, используемых глубоко в ядре, dalvik и так далее, а о шаблонах, с которыми разработчик приложения встретится при разработке приложения.
android
design-patterns
Burjua
источник
источник
UIViewController
реализованная с использованием MVC (UIViewController
это контроллер, а его кореньUIView
- view) ,UIApplication
использует делегирование , имеющий приложения делегат в качестве делегата и так далее ...Ответы:
Я попытался использовать как архитектурные шаблоны модель-вид-контроллер (MVC), так и модель-вид-презентатор для разработки Android. Мои выводы показывают, что модель-представление-контроллер работает нормально, но есть пара «проблем». Все сводится к тому, как вы воспринимаете Android
Activity
класс . Это контроллер, или это вид?Фактический
Activity
класс не расширяетView
класс Android , но, тем не менее, он обрабатывает отображение окна для пользователя, а также обрабатывает события этого окна (onCreate, onPause и т. Д.).Это означает, что когда вы используете шаблон MVC, ваш контроллер будет фактически псевдо-контроллером представления. Так как он обрабатывает отображение окна пользователю, с дополнительными компонентами представления, которые вы добавили в него с помощью setContentView, а также обрабатывает события, по крайней мере, для различных событий жизненного цикла активности.
В MVC контроллер должен быть главной точкой входа. Что немного спорно, если это имеет место при применении его в развитие Android, поскольку активность является естественной отправной точкой для большинства приложений.
Из-за этого я лично нахожу, что модель модель-вид-презентатор идеально подходит для разработки под Android. Поскольку роль представления в этом шаблоне:
Это позволяет вам реализовать вашу модель следующим образом:
Просмотр - содержит ваши компоненты пользовательского интерфейса и обрабатывает события для них.
Ведущий - это будет управлять связью между вашей моделью и вашим представлением, рассматривайте это как ворота к вашей модели. Это означает, что если у вас есть сложная модель предметной области, которая знает, что Бог знает, а вашему представлению требуется только очень небольшое подмножество этой модели, работа докладчиков заключается в том, чтобы запросить модель и затем обновить представление. Например, если у вас есть модель, содержащая абзац текста, заголовок и количество слов. Но в данном представлении вам нужно только отобразить заголовок в представлении. Затем докладчик прочитает данные, необходимые для модели, и обновит представление соответствующим образом.
Модель - это должна быть ваша полная модель предметной области. Надеемся, что это поможет сделать вашу модель домена более «узкой», так как вам не понадобятся специальные методы для рассмотрения дел, как упоминалось выше.
Отсоединив модель от вида все вместе (с помощью презентера), она также становится намного более интуитивно понятной для тестирования вашей модели. У вас могут быть модульные тесты для вашей доменной модели и модульные тесты для ваших докладчиков.
Попробуйте это. Лично я считаю, что он отлично подходит для разработки под Android.
источник
Обновление ноябрь 2018
После нескольких лет работы и ведения блогов о MVC и MVP в Android (см. Текст ответа ниже) я решил собрать свои знания и понимание в более полной и легко усваиваемой форме.
Итак, я выпустил полноценный видеокурс об архитектуре приложений Android. Итак, если вы заинтересованы в освоении самых передовых архитектурных шаблонов в разработке для Android, ознакомьтесь с этим подробным курсом здесь .
Этот ответ был обновлен, чтобы оставаться актуальным с ноября 2016 года
Похоже, вы ищете архитектурные шаблоны, а не дизайнерские шаблоны .
Шаблоны проектирования нацелены на описание общего «трюка», который программист может реализовать для обработки определенного набора повторяющихся задач программного обеспечения. Например: в ООП, когда необходимо, чтобы объект уведомил набор других объектов о некоторых событиях, шаблон проектирования наблюдателя может использоваться .
Поскольку приложения Android (и большая часть AOSP) написаны на Java, которая является объектно-ориентированной, я думаю, вам будет сложно найти единый шаблон проектирования ООП, который НЕ используется в Android.
Архитектурные шаблоны , с другой стороны, не решают конкретные программные задачи - они стремятся предоставить шаблоны для организации программного обеспечения на основе сценариев использования рассматриваемого программного компонента.
Это звучит немного сложно, но я надеюсь, что пример прояснит: если какое-то приложение будет использоваться для извлечения данных с удаленного сервера и представления его пользователю в структурированном виде, то MVC может быть хорошим кандидатом для рассмотрения. Обратите внимание, что я ничего не сказал о программных задачах и программном потоке приложения - я просто описал это с точки зрения пользователя, и появился кандидат на архитектурный паттерн.
Поскольку вы упомянули MVC в своем вопросе, я думаю, что архитектурные шаблоны - это то, что вы ищете.
Исторически, в Google не было официальных руководств по архитектуре приложений, что (среди прочих причин) приводило к полному беспорядку в исходном коде приложений Android. Фактически, даже сегодня большинство приложений, которые я вижу, все еще не следуют передовым методикам ООП и не показывают четкую логическую организацию кода.
Но сегодня ситуация иная - Google недавно выпустила библиотеку Data Binding , которая полностью интегрирована с Android Studio, и, даже, выкатила набор архитектурных чертежей для приложений Android .
Два года назад было очень сложно найти информацию о MVC или MVP на Android. Сегодня MVC, MVP и MVVM стали «модными словами» в сообществе Android, и нас окружают бесчисленные эксперты, которые постоянно пытаются убедить нас в том, что MVx лучше, чем MVy. По моему мнению, обсуждать, является ли MVx лучше, чем MVy, совершенно бессмысленно, потому что сами термины очень неоднозначны - просто посмотрите на ответы на этот вопрос , и вы поймете, что разные люди могут ассоциировать эти сокращения с совершенно разными конструкциями.
В связи с тем, что официально начался поиск лучшего архитектурного шаблона для Android, я думаю, мы увидим еще несколько идей. На данный момент невозможно предсказать, какой шаблон (или шаблоны) станут отраслевыми стандартами в будущем - нам нужно подождать и посмотреть (я думаю, это вопрос года или двух).
Однако есть один прогноз, который я могу сделать с высокой степенью достоверности: использование библиотеки привязки данных не станет отраслевым стандартом. Я уверен, что это так, потому что библиотека Data Binding (в ее текущей реализации) обеспечивает кратковременный выигрыш в производительности и своего рода архитектурное руководство, но в долгосрочной перспективе делает код не обслуживаемым. Как только долговременные эффекты этой библиотеки проявятся, она будет заброшена.
Теперь, хотя у нас сегодня есть какие-то официальные рекомендации и инструменты, я лично не думаю, что эти рекомендации и инструменты являются лучшими доступными вариантами (и они определенно не единственные). В своих приложениях я использую собственную реализацию архитектуры MVC. Он простой, чистый, читаемый и тестируемый, и не требует никаких дополнительных библиотек.
Этот MVC не просто косметически отличается от других - он основан на теории, согласно которой Операции в Android не являются элементами пользовательского интерфейса , что имеет огромное значение для организации кода.
Итак, если вы ищете хороший архитектурный шаблон для приложений Android, который следует принципам SOLID , вы можете найти его описание в моем посте об архитектурных шаблонах MVC и MVP в Android .
источник
Когда я дошел до этого поста, это действительно помогло мне понять шаблоны с примером, поэтому я сделал таблицу ниже, чтобы ясно увидеть шаблоны проектирования и их пример в Android Framework
Я надеюсь, что вы найдете это полезным.
Некоторые полезные ссылки для справки:
Введение в Android Design Patterns
Шаблоны проектирования
источник
В платформе Android используются различные шаблоны, такие как:
источник
Вот отличная статья об общих шаблонах дизайна для Android :
Творческие образцы:
Структурные схемы:
Поведенческие модели:
источник
В следующих классах Android используются шаблоны проектирования
1) View Holder использует Singleton Design Pattern
2) Намерение использует шаблон фабричного дизайна
3) Адаптер использует шаблон проектирования адаптера
4) Broadcast Receiver использует шаблон проектирования Observer
5) Вид использует шаблон Composite Design
6) Media FrameWork использует шаблон дизайна фасада
источник
в случае уведомлений
NotificationCompat.Builder
используется шаблон Builderлайк,
источник
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. Это шаблон Half Sync Half Async, используемый в реализации Asynctask. Смотрите мое обсуждение на
https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing
источник
В Android шаблон «обработчик рабочей очереди» обычно используется для выгрузки задач из основного потока приложения.
Пример: дизайн класса IntentService.
IntentService получает Intents, запускает рабочий поток и останавливает службу соответствующим образом. Все запросы обрабатываются в одном рабочем потоке.
источник
Биндер использует «Шаблон наблюдателя» для уведомлений получателя смерти.
источник