Este proyecto esta basado en la Arquitectura MVVM y Repository Pattern. Se ha utilizado los siguintes componentes y librerias
- Se utilizo Architecture Components (Lifecycle, LiveData, ViewModel, Room Persistence)
- DataBinding
- Material Design & Animations
- Dagger2 para inyección de dependencia
- Retrofit2 para consumir el (API REST)[https://developers.themoviedb.org/3/getting-started/introduction]
- Se utilizo (Room)[https://developer.android.com/topic/libraries/architecture/room] como abstraccion del SQLite de android para almacenar.
- Dao: Es la clase encargado de la comunicacion con la base de datos, es implementado utilizando el DAO Pattern. Realiza operaciones con las tablas.
- Se utilizo (retrofit)[https://square.github.io/retrofit/] para realizar las peticiones al API REST.
- La paginación de implemento utilizando (Paging)[https://developer.android.com/topic/libraries/architecture/paging/]
- La capa de negocio es implementado utilizando Repository Pattern.
- Repositories: Es la fuente de datos, encargado de obtener de la cache local o del servidor.
- ViewModels: Mediante la utilizacion de LiveData se informa a la UI que se obtuvo un resultado.
- Las vistas son manejadas por las activities y los fragments
Consiste en que una clase debe tener solamente una resposabilidad concreta. El proposito es identificar y crear abstracciones en pequeños componentes de software reutilizables.
- Debe tener una arquitectura definida (MVP, MVVM, CLEAN, etc).
- En lo posible se debe aplicar en la creación de las clases el principio SOLID.
- Implementar design paterns en las distintas capas de la arquitectura (DAO, Singleton, Factory, etc)
Escribir "buen" codigo implica tener buenos nombres de variables, clases y métodos. Debe reflejar cual es su cometido, su proposito. A parte de aplicar los Design Patterns, buenos principios de Ingenieria de Software, etc.