SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Cómo implementar MVP sin
morir en el intento
David Luque Quintana
¿Qué tengo que saber?
Clean
SOLID
MVP
Quien soy
David Luque Quintana
Android & iOS Signlab
GDG Córdoba Organizer
@TwitDavids
Índice
● Qué es Clean
● Qué es SOLID
○ S - Principio de Responsabilidad única
○ O - Principio de abierto-cerrado
○ L - Principio de sustitución de Liskov
○ I - Principio de segregación de
dependencias
○ D - Principio de inversión de
dependencias
● Qué es MVP
● MVC vs MVP
○ MVC
○ MVC - Pros y contras
● MVP vs MVP
○ MVP
○ MVP - Pros y contras
● ¿Y Google?
○ Android Architecture Components
● Cómo implementar MVP
○ UI
○ Presenter
■ Qué es EventBus
○ Data Model
● Artículos interesantes
¿Qué es Clean?
“Clean code” es código fácil de entender y fácil
de cambiar
¿Qué es Clean?
“Clean code is code that has been taken care of. Someone has taken the time to
keep it simple and orderly. They have paid appropriate attention to details. They
have cared.”
Robert C. Martin
¿Qué es Clean?
● Código separado por capas, como una cebolla.
● Una capa no debe de saber cómo está implementada otra capa.
● Las capas son aisladas, si modificamos una no se deben de modificar las
demás.
¿Qué es Clean?
● Independiente del Framework.
● Testable.
● Independiente de la UI.
● Independiente de la base de datos.
● Independiente de algo externo.
¿Qué es SOLID?
Son cincos principios básicos de la programación orientada a objetos.
S - Principio de responsabilidad única
Una clase debe tener una y sólo una razón para
cambiar, entendiendo que una clase está
destinada a una sóla función
S - Principio de responsabilidad única
S - Principio de responsabilidad única
El objeto que instanciemos debe realizar una única cosa.
● A más métodos más probable es que no haga una única cosa.
● Cuidado con los imports.
● Cuando cambiamos algo en nuestro código no se debe ver afectado.
O - Principio de abierto-cerrado
Los objetos o entidades deben estar abiertos a la extensión, pero cerrados a la
modificación.
Hay que ser capaz de ampliar la implementación de la clase sin modificar lo que
ya hay.
Las interfaces son nuestras amigas.
L - Principio de sustitución de Liskov
Cada clase que hereda de otra puede usarse como su padre sin necesidad de
conocer las diferencias entre ellas.
L - Principio de sustitución de Liskov
Si yo tengo una clase A que implementa una interfaz I, yo puedo declarar un
objeto I que instancie a la clase A
I - Principio de segregación de interfaces
Una clase no debe depender de métodos que no usa.
Cuando usamos interfaces, tenemos que tener cuidado de no implementar en una
clase una interfaz que tenga métodos que no vamos a usar.
D - Principio de inversión de dependencias
Con el principio de inversión de dependencias queremos que nuestro código core
no dependa de otros detalles de implementación, cómo puede ser el framework o
alguna conexión a base de datos.
La idea es no tener new en nuestro código, sino un inyector de dependencias que
nos dará todos esos objetos cuando nuestra clase se declare. Así nos ahorramos
todas las instancias, el código es más testable y podemos ahorrar problemas de
memoria.
Por tanto, las clases de nuestra aplicación tendrán dependencias abstractas.
¿Qué es MVP?
● Es una derivación de MVC
● Toda la lógica de presentación se va al Presenter
MVC vs MVP
MVC
● Modelo: clases que
representan las entidades.
Por ejemplo, clase Usuario.
● Vista: archivos XML del
layout
● Controlador: básicamente
Actividades o Fragments
MVC - Pros y contras
Pros:
● Una arquitectura usada en muchos
lenguajes y bastante común.
● Fácil de implementar.
● La aplicación queda
medianamente bien estructurada.
Contras:
● Código espagueti.
● Poco modular.
● No ayuda a la hora de depurar.
MVP
● Modelo: el modelo son las entidades
y la lógica de negocio que nos
permite interaccionar con servicios
externos o internos para la
representación de datos (Clean o
Repository).
● Presenter: es el cerebro de la lógica
de la aplicación, conecta la vista con
el modelo y sólo él puede hacerlo.
● Vista: al igual que en MVC son los
archivos XML de los layouts y las
Actividades o Fragments.
MVP - Pros y contras
Pros:
● Aplicación mucho más modular.
● Más testable.
● Reducción considerable de código
espagueti.
● Mayor limpieza de código.
Contras:
● Más capas de abstracción.
● Al principio se hace complejo.
● Si te gusta jugar con Context lo vas
a echar de menos.
¿Y Google?
● Los datos deben
“sobrevivir” al ciclo de la
actividad.
● No escribir todo el código
en la Actividad. Código
que no sea de UI no
debe ir ahí.
Android Architecture Components
Cómo implementar MVP
UI (Activity)
A dumb UI is a good UI
● La actividad, Fragment o DialogFragment SÓLO IMPLEMENTA UI.
● La vista delega las interacciones al Presenter.
● El Presenter ya se encargará de gestionar las interacciones cómo él vea.
● Cuando se genere algo desde el Presenter nos lo hará llegar a la vista
View Presenter
Presenter
Presenter
● Recibe las interacciones del usuario a través de la vista.
● Instancia EventBus para recibir eventos. (IMPORTANTE)
● Comprueba si la vista existe antes de hacer algo.
● Mantiene una instancia de la vista mientras está presente, se encarga de
eliminarla cuando se produce un onDestroy()
● Al recibir un evento ejecuta algo en la vista
¿Qué es EventBus?
Es un bus de eventos para simplificar componentes. Es muy simple de usar pero
debemos tener cuidado al usarlo.
¿Qué es EventBus?
¿Qué es EventBus? - Alternativas
● Podemos usar callbacks para retornar lo que nos haga
falta.
● Dobles interfaces, una para llamar y otra para recibir.
Data Model
(No interactors)
Repository
● El repositorio es la zona de nuestra app que se encarga del “trabajo sucio”
● Llama a la API, parsea los datos, lee de un JSON interno…
● Puede ser muy modular si lo codificamos de esta forma.
● Simple y fácil de debuggear
Artículos interesantes
● A detailed guide on developing Android apps using the Clean Architecture
pattern
● A dumb UI is a good UI
● Model-View-Presenter: Android guidelines

Más contenido relacionado

Similar a Como implementar MVP sin morir en el intento

VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJSLuis Natividad
 
Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de AndroidJavier Muñoz
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11540deg
 
Visteme con 'Clean Architecture' que tengo prisas
Visteme con 'Clean Architecture' que tengo prisasVisteme con 'Clean Architecture' que tengo prisas
Visteme con 'Clean Architecture' que tengo prisasJosé María Pérez Ramos
 
Yo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipoYo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipoLeo Díaz Murillo
 
Cultura DevOps - Conferencia Agile Spain 2017
Cultura DevOps - Conferencia Agile Spain 2017Cultura DevOps - Conferencia Agile Spain 2017
Cultura DevOps - Conferencia Agile Spain 2017Luis Fraile
 
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)Avanet
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
 

Similar a Como implementar MVP sin morir en el intento (20)

Principios de diseño
Principios de diseñoPrincipios de diseño
Principios de diseño
 
Met2 07 01-introduccion_poo
Met2 07 01-introduccion_pooMet2 07 01-introduccion_poo
Met2 07 01-introduccion_poo
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Solid
SolidSolid
Solid
 
Introducción a AngularJS
Introducción a AngularJSIntroducción a AngularJS
Introducción a AngularJS
 
Gwt IV -mvp
Gwt IV -mvpGwt IV -mvp
Gwt IV -mvp
 
Prog oo con_java
Prog oo con_javaProg oo con_java
Prog oo con_java
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Iniciación android
Iniciación androidIniciación android
Iniciación android
 
Taller Práctico de Android
Taller Práctico de AndroidTaller Práctico de Android
Taller Práctico de Android
 
Principios de cloud native
Principios de cloud nativePrincipios de cloud native
Principios de cloud native
 
202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy202204-Modernizando aplicaciones legacy
202204-Modernizando aplicaciones legacy
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
Spring
SpringSpring
Spring
 
Visteme con 'Clean Architecture' que tengo prisas
Visteme con 'Clean Architecture' que tengo prisasVisteme con 'Clean Architecture' que tengo prisas
Visteme con 'Clean Architecture' que tengo prisas
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
Yo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipoYo soy Dev, yo soy Ops y somos dos en un equipo
Yo soy Dev, yo soy Ops y somos dos en un equipo
 
Cultura DevOps - Conferencia Agile Spain 2017
Cultura DevOps - Conferencia Agile Spain 2017Cultura DevOps - Conferencia Agile Spain 2017
Cultura DevOps - Conferencia Agile Spain 2017
 
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
Taller Campus Party 2011: Desarrollo de Aplicaciones con .NET (Sesión 1)
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 

Último

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 

Último (19)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 

Como implementar MVP sin morir en el intento

  • 1. Cómo implementar MVP sin morir en el intento David Luque Quintana
  • 2.
  • 3. ¿Qué tengo que saber? Clean SOLID MVP
  • 4. Quien soy David Luque Quintana Android & iOS Signlab GDG Córdoba Organizer @TwitDavids
  • 5. Índice ● Qué es Clean ● Qué es SOLID ○ S - Principio de Responsabilidad única ○ O - Principio de abierto-cerrado ○ L - Principio de sustitución de Liskov ○ I - Principio de segregación de dependencias ○ D - Principio de inversión de dependencias ● Qué es MVP ● MVC vs MVP ○ MVC ○ MVC - Pros y contras ● MVP vs MVP ○ MVP ○ MVP - Pros y contras ● ¿Y Google? ○ Android Architecture Components ● Cómo implementar MVP ○ UI ○ Presenter ■ Qué es EventBus ○ Data Model ● Artículos interesantes
  • 6. ¿Qué es Clean? “Clean code” es código fácil de entender y fácil de cambiar
  • 7. ¿Qué es Clean? “Clean code is code that has been taken care of. Someone has taken the time to keep it simple and orderly. They have paid appropriate attention to details. They have cared.” Robert C. Martin
  • 8. ¿Qué es Clean? ● Código separado por capas, como una cebolla. ● Una capa no debe de saber cómo está implementada otra capa. ● Las capas son aisladas, si modificamos una no se deben de modificar las demás.
  • 9. ¿Qué es Clean? ● Independiente del Framework. ● Testable. ● Independiente de la UI. ● Independiente de la base de datos. ● Independiente de algo externo.
  • 10. ¿Qué es SOLID? Son cincos principios básicos de la programación orientada a objetos.
  • 11. S - Principio de responsabilidad única Una clase debe tener una y sólo una razón para cambiar, entendiendo que una clase está destinada a una sóla función
  • 12. S - Principio de responsabilidad única
  • 13. S - Principio de responsabilidad única El objeto que instanciemos debe realizar una única cosa. ● A más métodos más probable es que no haga una única cosa. ● Cuidado con los imports. ● Cuando cambiamos algo en nuestro código no se debe ver afectado.
  • 14. O - Principio de abierto-cerrado Los objetos o entidades deben estar abiertos a la extensión, pero cerrados a la modificación. Hay que ser capaz de ampliar la implementación de la clase sin modificar lo que ya hay. Las interfaces son nuestras amigas.
  • 15. L - Principio de sustitución de Liskov Cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.
  • 16. L - Principio de sustitución de Liskov Si yo tengo una clase A que implementa una interfaz I, yo puedo declarar un objeto I que instancie a la clase A
  • 17. I - Principio de segregación de interfaces Una clase no debe depender de métodos que no usa. Cuando usamos interfaces, tenemos que tener cuidado de no implementar en una clase una interfaz que tenga métodos que no vamos a usar.
  • 18. D - Principio de inversión de dependencias Con el principio de inversión de dependencias queremos que nuestro código core no dependa de otros detalles de implementación, cómo puede ser el framework o alguna conexión a base de datos. La idea es no tener new en nuestro código, sino un inyector de dependencias que nos dará todos esos objetos cuando nuestra clase se declare. Así nos ahorramos todas las instancias, el código es más testable y podemos ahorrar problemas de memoria. Por tanto, las clases de nuestra aplicación tendrán dependencias abstractas.
  • 19. ¿Qué es MVP? ● Es una derivación de MVC ● Toda la lógica de presentación se va al Presenter
  • 21.
  • 22. MVC ● Modelo: clases que representan las entidades. Por ejemplo, clase Usuario. ● Vista: archivos XML del layout ● Controlador: básicamente Actividades o Fragments
  • 23. MVC - Pros y contras Pros: ● Una arquitectura usada en muchos lenguajes y bastante común. ● Fácil de implementar. ● La aplicación queda medianamente bien estructurada. Contras: ● Código espagueti. ● Poco modular. ● No ayuda a la hora de depurar.
  • 24. MVP ● Modelo: el modelo son las entidades y la lógica de negocio que nos permite interaccionar con servicios externos o internos para la representación de datos (Clean o Repository). ● Presenter: es el cerebro de la lógica de la aplicación, conecta la vista con el modelo y sólo él puede hacerlo. ● Vista: al igual que en MVC son los archivos XML de los layouts y las Actividades o Fragments.
  • 25. MVP - Pros y contras Pros: ● Aplicación mucho más modular. ● Más testable. ● Reducción considerable de código espagueti. ● Mayor limpieza de código. Contras: ● Más capas de abstracción. ● Al principio se hace complejo. ● Si te gusta jugar con Context lo vas a echar de menos.
  • 26. ¿Y Google? ● Los datos deben “sobrevivir” al ciclo de la actividad. ● No escribir todo el código en la Actividad. Código que no sea de UI no debe ir ahí.
  • 29.
  • 31. A dumb UI is a good UI ● La actividad, Fragment o DialogFragment SÓLO IMPLEMENTA UI. ● La vista delega las interacciones al Presenter. ● El Presenter ya se encargará de gestionar las interacciones cómo él vea. ● Cuando se genere algo desde el Presenter nos lo hará llegar a la vista View Presenter
  • 33.
  • 34. Presenter ● Recibe las interacciones del usuario a través de la vista. ● Instancia EventBus para recibir eventos. (IMPORTANTE) ● Comprueba si la vista existe antes de hacer algo. ● Mantiene una instancia de la vista mientras está presente, se encarga de eliminarla cuando se produce un onDestroy() ● Al recibir un evento ejecuta algo en la vista
  • 35. ¿Qué es EventBus? Es un bus de eventos para simplificar componentes. Es muy simple de usar pero debemos tener cuidado al usarlo.
  • 37. ¿Qué es EventBus? - Alternativas ● Podemos usar callbacks para retornar lo que nos haga falta. ● Dobles interfaces, una para llamar y otra para recibir.
  • 39. Repository ● El repositorio es la zona de nuestra app que se encarga del “trabajo sucio” ● Llama a la API, parsea los datos, lee de un JSON interno… ● Puede ser muy modular si lo codificamos de esta forma. ● Simple y fácil de debuggear
  • 40. Artículos interesantes ● A detailed guide on developing Android apps using the Clean Architecture pattern ● A dumb UI is a good UI ● Model-View-Presenter: Android guidelines