Рефакторинг нашего приложения для использования 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, чтобы быть в курсе некоторых интересных идей от нашей команды инженеров по различным направлениям!