Movie App foi desenvolvido na intenção de praticar uma abordagem moderna para desenvolvimento de aplicativos Android.
O objetivo deste projeto é combinar bibliotecas populares do ambiente Android e demonstrar as melhores práticas de desenvolvimento baseadas nos estudos de SOLID, Android Architecture components, App Modulaziration e Clean Architecture.
Movie App é um aplicativo simples mas que busca ser modular, escalável, sustentável e testável. Este projeto está apenas em seu inicio, onde frequentemente receberá novas features, atualizações, refatoração, entre outras melhorias.
- Login de usuário
- Cadastro de usuário
- Listagem de filmes por categoria
- Busca por filme
- Adicionar filme na Minha Lista
- Alterar informações do usuário
- Marcar filme como favorito
- Criar listas diversas de filmes
- Outras...
- API
- Tech-stack
- Modern Architecture
- Clean Architecture
- MVVM
- Android Architecture components
- UI
- Material design
- Reactive UI
- Gradle
- Plugins
app
- Configuração de aplicativo fundamentallibrary_x
específicos da aplicação dos quais alguns dos recursos podem depender. Isso é útil se você deseja compartilhar alguns ativos ou código apenas entre alguns módulos de recursos (atualmente, o aplicativo não tem esses módulos)
Clean architecture
é a" arquitetura central "do aplicativo, então cada módulo de recursos
contém o próprio conjunto de camadas da arquitetura limpa:
Essa camada é a mais próxima do que o usuário vê na tela. A camada presentation
é uma mistura de MVVM
(Jetpack ViewModel
usado para preservar os dados durante o reinício da atividade).
Componentes:
- View (Fragment) - apresenta os dados na tela e passa as interações do usuário para o View Model. As visualizações são difíceis de testar, portanto, devem ser o mais simples possível.
- ViewModel - despacha (por meio de
LiveData
) mudanças de estado para a visualização e lida com as interações do usuário.
Esta é a camada central do aplicativo. Observe que a camada domain
é independente de quaisquer outras camadas. Isso permite fazer modelos de domínio e lógica de negócios independentes de outras camadas.
Em outras palavras, as mudanças em outras camadas não terão efeito na camada domain
, por exemplo. alterar o banco de dados (camada de data
) ou a interface de usuário da tela (camada de apresentação) não resultará em qualquer alteração de código dentro da camada de domain
.
Componentes:
- UseCase - contém lógica de negócios
- DomainModel - desafia a estrutura central dos dados que serão usados no aplicativo. Esta é a fonte para os dados do aplicativo.
- Interface do repositório - necessária para manter a camada
domain
independente da camada dedata
([Inversão de dependência]
Gerencia os dados do aplicativo e expõe essas fontes de dados como repositórios para a camada domain
. As responsabilidades típicas dessa camada seriam recuperar dados da Internet e, opcionalmente, armazenar em cache esses dados localmente.
Componentes:
- Repositório está expondo dados para a camada
domain
. Dependendo da estrutura do aplicativo e da qualidade, o repositório de APIs externo também pode mesclar, filtrar e transformar os dados. A intenção dessas operações são para criar uma fonte de dados de alta qualidade para a camadadomain
, não para realizar qualquer lógica de negócios (responsabilidade douse case
da camadadomain
).
- Crie um projeto com banco de dados no Firebase. Baixe o arquivo google-services.json deste projeto e adicione ele na pasta movie-app/app/
- Insira sua chave da API do The Movie DB no arquivo movie-app/java/olucasmoro.movieapp/app/service/utils/Constants.kt
MIT License
Copyright (c) 2021 Lucas Moro
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.