limpiando espero la arquitectura que yo quiero
TRANSCRIPT
![Page 1: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/1.jpg)
Limpiando esperola arquitectura que yo quiero
José Manuel Pereira GarcíaANDROID TEAM LEAD
Clean Architecture for Android
![Page 2: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/2.jpg)
José Manuel Pereira GarcíaANDROID TEAM LEAD
www.jmpergar.com@JMPergar
[email protected]+JoseMPereira
![Page 3: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/3.jpg)
We are [email protected]
![Page 4: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/4.jpg)
Objetivos y premisas
![Page 5: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/5.jpg)
Evitar el efecto L’Oréal(No elegir una arquitectura “porque yo lo valgo”)
![Page 6: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/6.jpg)
Mantenible
![Page 7: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/7.jpg)
MantenibleExtensible
![Page 8: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/8.jpg)
MantenibleExtensible
Testable
![Page 9: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/9.jpg)
MantenibleExtensible
Testable
Refactorizable
![Page 10: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/10.jpg)
The best approach when you apply “Clean Architecture” is to use common sense
by Rafael Aguilar (@Rais38)
![Page 11: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/11.jpg)
Todas las arquitecturas caducanMartin Fowler - SacrificialArchitecture
http://martinfowler.com/bliki/SacrificialArchitecture.html
![Page 12: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/12.jpg)
Separandoproblemas
![Page 13: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/13.jpg)
single responsibility principleAll you need is SRP
![Page 14: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/14.jpg)
Matando la God Activity
VIEWActivity
FragmentWidget
...
View
In
terfa
ce Todo lodemás
![Page 15: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/15.jpg)
Matando la God Activity
Render Methods, View Lifecycle and View Configuration
Todo lodemásVi
ewIn
terfa
ce
![Page 16: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/16.jpg)
Lógica de vista y Navegación
VIEW PRESENTERView Logic
NavigationROUTER
View
In
terfa
ceNavigation LAUNCHER
Implementation
Navig
atio
n La
unch
er
Inte
rface
Inte
rface Todo lo
demás
Opcional
![Page 17: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/17.jpg)
Lógica de vista y Navegación
VIEWProcesar eventos de vista
Solicitar datosControlar la vista
Guardar estado de la vista
goTogoToNext
back
View
In
terfa
cestartActivity
fragment transactions
Navig
atio
n La
unch
er
Inte
rface
Inte
rface Todo lo
demás
Opcional
![Page 18: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/18.jpg)
Flujo
View Presenter Domain
Flujo de llamadas
Click : Refresh Button
Active Loading Request Data
Response Error
Render Empty State Error
Click : Retry
Active Empty State Loading Request Data
Response DataDisable Loading
Disable Loading
Render Data
![Page 19: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/19.jpg)
Para solucionar el problema de los giros de pantallamantener en la vista la referencia al Presenter
entre cambios de configuración gracias a:onRetainCustomNonConfigurationInstancegetLastCustomNonConfigurationInstance
Sólo en la
Activity
![Page 20: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/20.jpg)
Lógica de negocio
PRESENTER
ROUTER
View
In
terfa
ceNa
vigat
ion
Laun
cher
In
terfa
ce
Use
Case
s In
terfa
ce INTERACTOR
INTERACTOR
INTERACTOR
Inte
rface Todo lo
demás
![Page 21: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/21.jpg)
Lógica de negocio
PRESENTER
ROUTER
View
In
terfa
ceNa
vigat
ion
Laun
cher
In
terfa
ce
Validación de datos
Obtención de datos
Procesamiento de datos
Inte
rface Todo lo
demás
Use
Case
s In
terfa
ce
![Page 22: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/22.jpg)
Lógica de negocio
View
In
terfa
ceNa
vigat
ion
Laun
cher
In
terfa
ce
Inte
rface Todo lo
demás
background tasks
Interactor >> RunnableThreadExecutor >> ThreadPoolExecutorPostExecutionThread >> MainThread Handler
Use
Case
s In
terfa
ce INTERACTOR
INTERACTOR
INTERACTOR
PRESENTER
ROUTER
![Page 23: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/23.jpg)
Lógica y proveedores de datos
ActivityFragment
Widget...
View Logic(Presenter)
NavigationRouter
View
In
terfa
ce
Navigation Launcher Implementation
Navig
atio
n La
unch
er
Inte
rface
Use
Case
s
Repo
sito
ry
Inte
rface
REPOSITORY
INTERACTOR
INTERACTOR
INTERACTOR
Data
Sour
ce
Inte
rface
Data
Sour
ce
Inte
rface
APIDataSource
CACHEDataSource
![Page 24: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/24.jpg)
Lógica y proveedores de datos
ActivityFragment
Widget...
View Logic(Presenter)
NavigationRouter
View
In
terfa
ce
Navigation Launcher Implementation
Navig
atio
n La
unch
er
Inte
rface
Use
Case
s Políticas de cacheoLógica de origen de datos
INTERACTOR
INTERACTOR
INTERACTOR
Data
Sour
ce
Inte
rface
Data
Sour
ce
Inte
rface
Integración con los proveedores de
datos
Integración con los proveedores de
datos
Repo
sito
ry
Inte
rface
![Page 25: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/25.jpg)
CleanArchitecture
![Page 26: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/26.jpg)
ActivityFragment
Widget...
View Logic(Presenter)
NavigationRouter
View
Inte
rface
Navigation Launcher Implementation
Navig
atio
n La
unch
er
Inte
rface
Use
Case
s
Repo
sito
ry
Inte
rface
INTERACTOR
INTERACTOR
INTERACTOR
Data
Sour
ce
Inte
rface
Data
Sour
ce
Inte
rface
APIDataSource
CACHEDataSource
REPOSITORY
![Page 27: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/27.jpg)
ENTIDADESUI
PRES
ENTE
RS
INTERACTORS
REPOSITORIES
DATA SOURCES
![Page 28: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/28.jpg)
ENTIDADESUI
PRES
ENTE
RS
INTERACTORS
REPOSITORIES
DATA SOURCES
AbstraccionesConcreciones Concreciones
![Page 29: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/29.jpg)
ENTIDADESUI
PRES
ENTE
RS
INTERACTORS
REPOSITORIES
DATA SOURCES
AbstraccionesConcreciones Concreciones
JAVAANDROID ANDROID
![Page 30: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/30.jpg)
ENTIDADESUI
PRES
ENTE
RS
INTERACTORS
REPOSITORIES
DATA SOURCES
AbstraccionesConcreciones Concreciones
JAVAANDROID ANDROID
Regla de la dependenciaRegla de la dependencia
![Page 31: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/31.jpg)
¿Que hemos conseguido?
● Arquitectura independiente del framework, UI y proveedores de datos.
● Una arquitectura modular horizontal y verticalmente.● Separar problemas y mejorar la legibilidad del código.● Solucionar el problema de los cambios de configuración.● Simplificar el problema de ejecución en segundo plano.● Declarar el objetivo de tu software gracias a los interactors.
![Page 32: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/32.jpg)
Show me the code!
![Page 33: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/33.jpg)
Gente a la que debo una cerveza
@pedro_g_s @PaNaVTEC@sefford
@Akelael @fernando_cejas @flipper83
Saúl DíazAndroid Engineer en ChicisimoPedro GómezAndroid Expert en KarumiChristian PanaderoAndroid Developer en MoniRubén SerranoLead Android Developer en RedboothFernando CejasAndroid Developer en SoundCloudJorge BarrosoCofounder y Android Expert en Karumi
![Page 34: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/34.jpg)
ReferenciasFernando Cejas - Architecting Android…The clean way?
http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/Jorge Barroso - Forgetting Android
https://www.youtube.com/watch?v=ROdIvrLL1aoPedro Gómez - Software Design Patterns
https://www.youtube.com/watch?v=tt3zI9cKiWUPedro Gómez - Effective Android UI
https://www.youtube.com/watch?v=N6yqe88ysNwRubén Serrano y José Manuel Pereira - Arquitectura Hexagonal en Android
https://www.youtube.com/watch?v=C3e3AwOTohgChristian Panadero - My way to Clean Architecture
https://www.youtube.com/watch?v=lOEOK3UvmJMUncle Bob- The Clean Architecture
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
![Page 35: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/35.jpg)
Preguntas
José Manuel Pereira GarcíaANDROID TEAM LEAD
www.jmpergar.com
@JMPergar
+JoseMPereira
![Page 36: Limpiando espero la arquitectura que yo quiero](https://reader034.vdocuments.mx/reader034/viewer/2022052317/55b49279bb61eb4d258b4605/html5/thumbnails/36.jpg)
GRACIAS