Написать программу для бега. На Андроид.

Цель

Решил написать новую программу с чистого листа.

Не ради гонки за модой, а для того, чтобы сделать попробовать правильные техники. Чтобы написать приложение, код которого было бы не стыдно показать хотя бы месяц после ее завершения :)))

И программа эта будет для записи треков на пробежке. Да, для тестирования мне придется побегать – и это то, что я хочу! )))

Итак, начнем…

Стек технологий

Стек технологий

  • MVP
  • Kotlin
  • RX
  • DI (Dagger2)
  • Firebase Database (попробовать Realm)
  • TDD (Mockito, Espresso, Stetho)

Главный экран

Для списка треков реализовал:

  • Презентер
  • Интерактор
  • Интерфейс для репозитория треков
  • Реализацию репозитория треков на Realm (Для начала решил сделать на нем, так как думаем рабочий проект на него переделать. Позже реализую на FireBase RealDatabase)

Все это (кроме репозитория) сделал через TDD. Через TDD избежал многих архитектурных ошибок.

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

Пакеты разделил по слоям: ui, business и data. В UI находятся слои VP из MVP, в Business – бизнес логика (интеракторы и бизнес-объекты), а в Data – соответственно работа с данными (DTO, репозитории DB и в будущем работа с сетью). Тестами покрываю презенторы из UI и слой Business. Конечно, я понимаю, что это не окончательный вариант и возможно еще будет 100500 раз пересматриваться, но пока мое понимание на данном уровне :)

Интерактор отдает презентеру Rx, причем поток реализован не закрытый, а как динамически изменяемый, что и надо от Rx. То есть если кто-то изменяет объект, то подписчикам будет сразу разослано изменение. Для меня это новое. Раньше Rx использовал только как более удобную замену AsyncTask, не более. Сейчас же, использовал главный механизм Rx – создание и публикация непрерывного потока данных. Это действительно мощь! Теперь различные EventBus‘ы стали более не нужны.

Все необходимые связи сделаны через Dagger2, при этом для TDD сделаны подмены для моков Mockito.

TDD + Kotlin + Rx + Dagger + Mockito + Realm… Все это для меня в новинку, поэтому было интересно и сложно. Но я справился :)

Тяжелее всего мне далась связка Kotlin + Dagger + Mockito. Никак не мог заставить ее работать, но все получилось и заработало.

 Следующий этап – экран записи трека.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Facebook Auto Publish Powered By : XYZScripts.com