Рефакторинг нашего приложения для использования MVP и его преимущества
Единственный способ уложиться в срок - единственный способ действовать быстро - это постоянно поддерживать код как можно более чистым.
- Роберт С. Мартин, Чистый код: руководство по созданию гибкого программного обеспечения
В Treebo мы стараемся использовать технологии, чтобы дать каждому гостю впечатления высочайшего качества во время их пребывания у нас. Учитывая это поручение, мы создали Prowl - Guest Experience Platform @ Treebo, сложную систему, которая позволяет нам отслеживать качество на различных объектах в режиме реального времени (мы подробно описали это на детальном уровне здесь) . Неотъемлемой частью обеспечения соответствия каждого объекта Treebo нашим стандартам качества является приложение Prowl для Android.
С тех пор, как в 2008 году была выпущена первая версия Android, разработчиков мучил давний вопрос: Как нам спроектировать приложение, чтобы было намного проще добавлять новые функции и поддерживать существующий код? Действие или фрагмент - это базовый компонент для любого приложения Android. Однако, когда мы имеем дело только с действиями, часто становится очень сложной задачей разделить логику пользовательского интерфейса и бизнес-логику, что нарушает принцип единой ответственности, первый принцип твердого дизайна. Таким образом, нам нужен архитектурный шаблон, в котором пользовательский интерфейс (представление) и данные (модель) не зависят друг от друга и связаны через общий интерактор (презентатор).
Что такое MVP?
- Просмотр - это слой, который отображает данные и реагирует на действия пользователя. В Android это может быть Activity, Fragment, android.view.View или Dialog.
- Модель - это уровень доступа к данным, например API базы данных или API удаленного сервера.
- Presenter - это слой, который предоставляет View данные из модели. Presenter также выполняет фоновые задачи.
С помощью этого шаблона становится легче отделить логику представления от бизнес-логики. Такое разделение задач помогает писать масштабируемые приложения, значительно упрощает тестирование, упрощает сопровождение кода и является огромным благословением для разработчиков.
Зачем использовать MVP?
Большинство современных приложений для Android просто используют архитектуру View-Model. В типичном шаблоне проектирования модель-представление уровни представления и данных приложения тесно связаны, и, следовательно, между двумя уровнями нет уровня абстракции. Следовательно, для всех практических целей существует только один уровень, обрабатывающий как представления, так и их взаимодействие с различными источниками данных. Это приводит к избыточности кода и трудностям масштабирования.
Преимущества использования MVP:
- Простое моделирование данных. Всегда рекомендуется отделять уровень данных от представлений приложения. Затем данные могут быть смоделированы отдельно на другом слое для обслуживания нескольких представлений. Вот здесь и пригодится уровень представления.
- Простая отладка. Создав три разных уровня абстракции, становится проще тестировать и отлаживать каждый уровень по отдельности и сузить источник ошибки до одного из трех уровней.
- Повышенное повторное использование кода: разработчик должен писать намного меньше кода, потому что один источник данных обслуживает все представления. Это экономит пропускную способность, поскольку аналогичные данные не нужно запрашивать более одного раза.
- Легко тестируемый код. Поскольку бизнес-логика отделена от логики пользовательского интерфейса, написание тестовых примеров становится намного проще, а охват тестированием может значительно увеличиваться.
Пример MVP в Prowl
Сначала создается интерфейс, в котором размещаются абстрактные методы, которые должны реализовывать View и Presenter. Это помогает нам отделить код от реализации и помогает абстрагироваться от фреймворка.
Правило большого пальца при реализации паттерна MVP - сделать ваше представление как можно более тупым. Все, что делает представление, - это обрабатывает изменения пользовательского интерфейса, все остальное происходит внутри Presenter.
Выступающий отвечает за изменение представления, пока он извлекает данные, а затем обновляет представление, как только это будет сделано.
Заключение
Использование шаблона MVP в приложении для Android значительно упрощает жизнь разработчикам. Это остается верным пословице: Если сомневаешься, говори глупо. Это делает наш код более организованным, сегментированным и, как следствие, упрощает отладку и написание тестов.
Попробуйте MVP и расскажите о нем!
Если вы заинтересованы в сотрудничестве с лучшими специалистами в области технологий и бизнеса в стране? Отправьте нам электронное письмо на адрес [email protected]. Мы любим общаться и встречаться с отличными инженерами и менеджерами по продуктам.
Следите за нами на Medium, чтобы быть в курсе некоторых интересных идей от нашей команды инженеров по различным направлениям!