Skip to content

Central-University-IT-prod/public-mobile-Dayone-6

Repository files navigation

LifestyleHUB

Основные сведения:

  • Строки: Kotlin 3500+, XML 2100+
  • Файлы: .kt 100+, .xml 50+
  • Паттерн: MVVM
  • Архитектура: Одна активность, один модуль, возможно немного Чистой архитектуры

Было тяжело...

Обоснование принятых решений:

  • Библиотеки:
    • Room: библиотека для работы с локальными данными, под капотом SQLite. Многое уже сделано за тебя, остается лишь уточнить вид бд и взаимодействие с ней, благодаря этому экономится огромное количество времени. Почему не аналоги? Нет очевидных преимуществ, поэтому использую то, с чем уже работал
    • Retrofit: библиотека для реализации rest-взаимодействия. Почему не дефолтный HttpConnection? Опять же, огромное количество кода уже написано за тебя, остается лишь уточнить реализацию. Также, более удобное взаимодействие с запросами. У аналогов явных преимуществ нет
    • Skeleton: библиотека для реализации постепенной загрузки элементов. Есть большое количество аналогов, но функционал +- одинаковый. Не вижу смысла писать свой skeleton, так как данная библиотека покрывает весь требуемый мной функционал.
    • Glide: библиотека для работы с изображениями. Есть аналоги, но мне захотелось использовать именно glide(снова, очевидных преимуществ нет). Позволяет быстро и без проблем загружать изображения с url/uri. Не нужно использовать лишние корутины, под капотом они уже есть. Также glide сам кэширует изображения.
    • FusedLocation: входит в состав google play services. Позволяет получать локацию быстрее, чем встроенный LocationManager. Но если гугл сервисы недоступны, приходится использовать его.
    • Coroutines: отличная замена потокам. Намного более эффективные и быстрые, чем потоки. Читабельнее в коде. Преимущества очевидны.
    • Navigation: для лучшего опыта использования, приложения с навигацией интуитивно понятнее и проще для пользователя.
    • ViewModel, LiveData: требуются для реализации паттерна MVVM.
  • Решения:
    • FeedAdapter: для того, чтобы добавить новый вид элемента в ленту нужно: в файле FeedItem.kt в класс FeedItem добавить новый элемент по примеру уже имеющихся. В enum FeedItemType добавить новый тип элемента. В сам адаптер добавить новый ViewHolder, в onCreateViewHolder создать этот view holder на примере уже имеющихся.
    • Все View Model взаимодействуют с их владельцами через статусы. Каждый статус имеет имент несколько состояний, в основном - 2: Succeed, в котором передаются успешно полученные данные и Failed, в котором либо ничего не передается, либо передается код ошибки, хранящийся в FailureCode.
    • Пароль при регистрации может быть любой длины, но не пустым. Не накладывал ограничений для более быстрого и удобного тестирования. Тоже и с логином
    • Вся логика авторизации и регистрации вынесена в папку account. При использовании в другом приложении данный "модуль" предоставляет возможность регистрации и авторизации пользователей с использованием локальной бд. Локальную бд можно достаточно легко заменить на удаленную бд.
    • Почему MVVM. Большая часть современных приложений пишется с этим паттерном. Имеется четкое разграничение между отображения данных, работой с ними и их получением. Поэтому при масштабировании и внесении каких-либо изменений в работу какой-либо из абстракций, остальные не меняют своего вида.
    • В приложении используется View binding. Сильно ускоряет

Что сделано?

  • Основной функционал кроме теста виджета погоды.
  • Улучшения основного функционала в виде: Pull to refresh, Skeleton, временное кэширование данных.
  • Дополнительный функционал: Bored API, под него выделена отдельная вкладка в навигации. Реализована логика избранного, реализовано кэширование полученных ответов. Есть возможность полной настройки запроса к Bored API ActivitySettingsFragment.kt
  • Приложеие доступно в двух языках: Русском и английском и в двух темах - светлая и темная. Язык и тема как в устройстве.
  • Неавторизованому пользователю недоступен виджет погоды и досуг. Досуг связан с пользователями, у каждого он свой.

Что можно сделать?

  • Внедрить библиотеку для перевода и перевести api на русский язык.
  • Доработать или переработать ui для лучшего взаимодействия с пользователем.
  • Переработать код для большей понятности и читабельности.
  • Использовать больше воозможностей Places и Venue API.
  • Улучшить обработку ошибок: для каждой ситуации выводить свои сообщения или делать свои действия.
  • Расширить функционалом путешествий:
    • с помощью Places и Venue API можно получать информацию о интересных местах в других городах и местах
    • c помощью TravelPayouts API можно мониторить авиабилеты
    • с помощью карт (YandexMapKit к примеру) выбирать города и места для путешествий
  • И много-много чего еще...

That's all! Надеюсь, весь мой код будет понятен для вас, проверяющих. Но если нет, то (.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages