Giter VIP home page Giter VIP logo

rick-and-morty's Introduction

GitHub repo size

Rick and Morty

O aplicativo Rick and Morty demonstra o desenvolvimento Android moderno utilizado Hilt, Coroutines, Flow, Jetpack (Compose, Paging 3, Room, ViewModel), baseada na arquitetura MVVM.

Bibliotecas e tech-stack

Arquitetura

Rick and Morty se baseia na arquitetura MVVM e no Repository pattern, que segue a Guia de arquiterura oficial do Google.  

Visão geral da arquitetura

  • Cada camada segue um fluxo unidirecional de eventos/dados; a camada de UI emite eventos para a camada de dados e esta expõe um stream de dados para as outras camadas.
  • A camada de dados é projetada para funcionar independentemente de outras camadas e deve ser pura, o que significa que não possui nenhuma dependência das outras camadas.  

Camada de UI

A camada se configura com elementos de UI, como telas, e interagem com o usuário e um ViewModel que guarda os estados da aplicaçào.

Com a utilização do Jetpack Compose, toda a camada visual é escrita em Kotlin, não fazendo uso do tradicional layout em XML.  

Camada de dados

A camada de dados é formada por um repositório, que realiza consultas ao dados locais (banco de dados) e requisições remotas à internet. Foi implementada para ser offline-first, seguindo o princípio single source of truth.

 

Funcionalidades

A tela principal lista todos os personagens disponiveis e realiza a paginação, carregando mais dados, quando necessário.

Clicano em um personagem, é possível ver mais detalhes

Ao rotacionar a tela, a disposição das informações é alterada, para melhor visualização

É possível realizar uma busca pelo nome e status do personagem

Considerações e decisões

  • Optou-se por utilizar as últimas versões das bibliotecas do compose e material 3 atualmente disponíveis, o que implica na adição de anotações Experimental em partes do projeto, sendo sujeitas a mudanças futuras. Assumui-se também que este projeto não entraria em produção e foi então utilizado como um experimento das novas releases.

  • O projeto utilizou o Jetpack Compose podendo fazer uso do mais novo toolkit de desenvolvimento nativo oficial, descrevento a camada de UI puramente em Koltlin e de modo declarativo. Em um projeto de uma aplicação comercial, construir a aplicação utilizando este paradigma pode facilitar uma futura migração para Kotlin Multiplataforma se a intenção for criar aplicações para múltiplos sistemas, facilitando o reaproveitamento de código.

  • Para a paginação dos dados foi utilizada a biblioteca Paging 3, através da implementação de um RemoteMediator que realiza uma integração fluida com a biblioteca Room deixando transparente para os consumidores o fluxo de dados que automaticamente retorna somente do cache local (banco de dados) caso haja falta de conexão à internet.

  • Este projeto não possui use cases, o view model consome o flow diretamente do repositório. O motivo foi o fato do stream de dados conter a classe PagingData, parte da biblioteca Paging 3. Se considerarmos que a camada de domínio somente contém classes Kotlin puras, sem conhecimento de outras bibliotecas, aqui do framework Android, adicionar um use case entre a camada de dados (repositório) e de apresentação (view model), seria uma "violação" deste princípio já que o use case teria conhecimento da classse PagingData, adicionando uma dependência.

rick-and-morty's People

Contributors

aldomddev 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.