Giter VIP home page Giter VIP logo

fasdar / pikabu.posts Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 215 KB

Пример приложения для отображения и сохранения постов. Построено по принципу чистой архитектуры с использованием MVVM. Более полный стек описан в README

Kotlin 100.00%
dagger2-mvvm dagger2 clean-architecture mvvm-android mvvm-architecture dagger2-android android cicerone android-architecture

pikabu.posts's Introduction

Architecture

Архитектура приложения построена с использованием Clean Architecture c разделением на три слоя (App, Data, Domain), Ui часть app слоя использует MVVM в взаимодействие с стандартными средствами Android архитектуры и Single Activity подход, данные методы реализации был выбраны поскольку многие элементы позволяют реализовать безопасное приложение с точки зрения жц и при работе с много поточностью которая в данном случае построена на kotlin корутинах при использование flow, вся работа с потоками происходит внутри ViewModel и не выходит за рамки его корутин scop’a.

Список использованных инструментов

Domain Layer

  • Kotlinx coroutines

Data Layer

  • Retrofit 2
  • Gson
  • Room

App Layer

  • Android Material Library
  • Lifecycle Extensions, ViewModel, LiveData
  • Cicerone
  • Epoxy
  • Dagger 2
  • Glide 4
  • Event Bus

Описание выбора инструментов

Поскольку проект реализуется на kotlin, то для работы с много поточностью были выбраны корутины, для добавления реактивности был использован flow.

Для работы с Rest Api применялся Retrofit ввиду того что на данный момент это один из простых и удобных инструментов который позволяет описать все запросы в виде интерфейса и поддерживает работы с корутинами, так же для парсинга данных и конвертации типов в Room используется Gson.

С целью кэширования постов используется Room опять же поскольку он без проблем позволяет составить модели таблиц в виде Сущностей и описать простые запросы на уровне интерфейса, ну и совместим с архитектурными компонентами Android.

При работе с навигацией используется Cicerone, данный подход был выбран поскольку навигация происходит в рамках кода приложения, что позволяет реализовать так называемую динамическую навигацию без явной связи с определенным сценарием, и так как сам Cicerone можно считать как обертку над Fragment Manager’om это позволяет задать без проблем кастомные анимации и прочие условия так если бы использовался fragment manager.

Для построения списка использовался Epoxy, единственное его преимущество в рамках данного приложения — это удобное построение без написание большого адаптера, и DiffUtil под каптом.

При работе с изображением использован Glide v4 который по сравнению с конкурентами не привязан к определенной View те можно использовать стандартную ImageView и реализует кеширование изображения под катом.

Для DI используется Dagger 2, здесь каких-либо явных причин на именно его использования нет, из каких-то объективных это возможность построения более гибкого графа по сравнению с иными di фреймворками и построение графа при компиляции.

EventBus использовался только для синхронизации состояния сохраненных постов между local и network лентой, что как по мне не является каким либо антипатерном и вполне можно использовать в рамках связывания фрагментов, активити итд без привязывания к жц приложения.

pikabu.posts's People

Contributors

fasdar avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.