Limpiando espero la arquitectura que yo quiero

36
Limpiando espero la arquitectura que yo quiero José Manuel Pereira García ANDROID TEAM LEAD Clean Architecture for Android

Transcript of Limpiando espero la arquitectura que yo quiero

Page 1: Limpiando espero la arquitectura que yo quiero

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

José Manuel Pereira GarcíaANDROID TEAM LEAD

www.jmpergar.com@JMPergar

[email protected]+JoseMPereira

Page 3: Limpiando espero la arquitectura que yo quiero

We are [email protected]

Page 4: Limpiando espero la arquitectura que yo quiero

Objetivos y premisas

Page 5: Limpiando espero la arquitectura que yo quiero

Evitar el efecto L’Oréal(No elegir una arquitectura “porque yo lo valgo”)

Page 6: Limpiando espero la arquitectura que yo quiero

Mantenible

Page 7: Limpiando espero la arquitectura que yo quiero

MantenibleExtensible

Page 8: Limpiando espero la arquitectura que yo quiero

MantenibleExtensible

Testable

Page 9: Limpiando espero la arquitectura que yo quiero

MantenibleExtensible

Testable

Refactorizable

Page 10: Limpiando espero la arquitectura que yo quiero

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

Todas las arquitecturas caducanMartin Fowler - SacrificialArchitecture

http://martinfowler.com/bliki/SacrificialArchitecture.html

Page 12: Limpiando espero la arquitectura que yo quiero

Separandoproblemas

Page 13: Limpiando espero la arquitectura que yo quiero

single responsibility principleAll you need is SRP

Page 14: Limpiando espero la arquitectura que yo quiero

Matando la God Activity

VIEWActivity

FragmentWidget

...

View

In

terfa

ce Todo lodemás

Page 15: Limpiando espero la arquitectura que yo quiero

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

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

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

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

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

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

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

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

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

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

CleanArchitecture

Page 26: Limpiando espero la arquitectura que yo quiero

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

ENTIDADESUI

PRES

ENTE

RS

INTERACTORS

REPOSITORIES

DATA SOURCES

Page 28: Limpiando espero la arquitectura que yo quiero

ENTIDADESUI

PRES

ENTE

RS

INTERACTORS

REPOSITORIES

DATA SOURCES

AbstraccionesConcreciones Concreciones

Page 29: Limpiando espero la arquitectura que yo quiero

ENTIDADESUI

PRES

ENTE

RS

INTERACTORS

REPOSITORIES

DATA SOURCES

AbstraccionesConcreciones Concreciones

JAVAANDROID ANDROID

Page 30: Limpiando espero la arquitectura que yo quiero

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

¿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

Show me the code!

Page 33: Limpiando espero la arquitectura que yo quiero

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

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

Preguntas

José Manuel Pereira GarcíaANDROID TEAM LEAD

www.jmpergar.com

@JMPergar

[email protected]

+JoseMPereira

Page 36: Limpiando espero la arquitectura que yo quiero

GRACIAS