tipo de entidad y muestra la relación entre estos para una llegar a una solución. • Representan la forma de estructurar clases para resolver problemas comunes. • Describen una estructura interna.
componentes que están compuestos por módulos más pequeños. Cada componente tiene una responsabilidad única con respecto a la arquitectura. Patrón de Arquitectura Micro-kernel. Fuente: Oreilly.com
a nivel general de una aplicación Android y la interacción que tendrá el usuario con esta. • Define como obtendremos la data y la mostraremos al usuario.
conexiones a servidor, datos. • Vista: Interface que será implementada por Activity, Fragment o View. • Controlador: Clase aparte que se comunica con la vista a través de una interface.
implementada por Activity, Fragment o View. • Presentador: “lógica de la vista” y mediador con modelo. • Modelo: lógica de negocio, recoge datos, repositorios.
fun hideLoader() fun errorInternet() fun errorServer() fun onMoviesLoaded(list: ArrayList<Movie>) } interface ShowMoviesPresenter : BasePresenter { fun setInteractor(interactor: ShowMoviesInteractor) fun showMovies() fun onMoviesLoaded(list: ArrayList<Movie>) fun onMoviesError(errorCode: Int) } interface ShowMoviesInteractor { fun getMovies() } … override fun getMovies() { repo.getMovies() // in which thread the work will be executed .subscribeOn(Schedulers.computation()) // in which thread is onNext() method going to be listened .observeOn(AndroidSchedulers.mainThread()) // onComplete() call will execute onMoviesLoaded method .subscribe(presenter::onMoviesLoaded) } interface MoviesRepository<T> { fun getMovies() : Single<List<T>> } Solo cambios de UI Gestiona los cambios de UI y se comunica con el mediador al repositorio (interactor) Caso de uso y escucha al repositorio Obtiene los datos, no interesa de donde, siempre devolverá objetos T Observa
llamadas a bases de datos. • ViewModel: interactúa con el modelo y observa sus cambios. Prepara la data a ser observada. • View: actualiza la UI. Observa al ViewModel. ¡Ninguna capa tiene conocimiento sobre la existencia de la capa anterior! Se suscribe a los cambios de: Se suscribe a los cambios de: Solicita datos de:
herramientas extras y el sistema no se limita a ellos. • Testeable: cada módulo se puede probar sin la necesidad de otro. • Independencia de cualquier agente externo: las reglas de negocio no saben nada acerca del exterior. • Independencia de la UI: la forma de presentar el sistema al usuario puede cambiar. • Independencia de cualquier base de datos: puedes cambiar de Oracle a MySQL o de Mongo a Firebase o de SQL Server a Mongo...
Patterns: Model-View-Controller. • Florina Muntenescu (Noviembre, 2016). Android Architecture Patterns: Model-View-Presenter. • Antonio Leiva (Abril, 2014). MVP for Android: how to organize the presentation layer. • Janishar Ali (Julio, 2017). Android MVP Architecture Extensions with Interactors and Repositories. • Florina Muntenescu (Abril, 2017). MVVM - It's All in The (Implementation) Details. • Joe Birch (Septiembre, 2015). Approaching Android with MVVM. • Petr Nohejl (Diciembre, 2016). MVVM on Android. • Roy Ng (Mayo, 2017). It's time to use MVVM as your Android’s app base architecture. • Jose Alcérreca (Septiembre, 2017). ViewModels and LiveData: Patterns + AntiPatterns. • Jordi González (Noviembre, 2010). Clean Architecture. The Bemobile Way. • Antoni Castejón (Febrero, 2017). Android clean architecture with ViewModel, UseCases and Repositories: Part 1. • Arthur Antunes (Diciembre, 2016). SOLID Principles: The Definitive Guide. • Uncle Bob (Agosto, 2012). The Clean Architecture. • Chema Pramos (Enero, 2016). Arquitectura Clean de Uncle Bob. • Chema Pramos (Febrero, 2016). Vísteme con Clean Architecture que tengo prisas. • Google Developers (Mayo, 2018). Guide to App Architecture. • Jose Flavio Quispe (Abril, 2018). Basic concepts of Software Architectures in Android. • Neal Ford en Oreilly.com (Setiembre, 2015). Contrasting architecture patterns with design patterns. • Microsoft Docs (Diciembre, 2010). Key Principles of Software Architecture. • Antonio Leiva (Octubre, 2018). Clean architecture para Android con Kotlin. • Yossi Segev (Marzo, 2018). A Guided Tour inside a clean architecture code base.