SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Software Design Patterns on Android
Pedro Vicente Gómez Sánchez - Mobile Software Engineer, Tuenti Technologies.
@pedro_g_s , @TuentiEng
pgomez@tuenti.com
http://corporate.tuenti.com/es/dev/blog - @TuentiEng
http://corporate.tuenti.com/es/jobs
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Por qué hablar de patrones
cuando podríamos estar en el bar?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
“Si vuelvo a ver anotaciones para parsing json en una clase del dominio
de mi problema, me pego un tiro.”
“Si vuelvo a ver un proyecto en el que no se use inyección de
dependencias, me tiro por una ventana.”
“Si vuelvo a ver un proyecto en el que cada clase tenga más de 7
dependencias, me mudo a la India.”
“Si vuelvo a ver una clase de 3000 líneas de código, me paso a
programar para iOS.”
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Pedro Gómez
● Introducción
● Problema a resolver.
● Patrones en Android.
● Patrón Renderer.
● Patrón Repository.
● Patrón Command.
● Consejos prácticos.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
DISCLAIMER
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Software Design Patterns on Android - Pedro V. Gómez Sánchez
Software Design Patterns on Android - Pedro V. Gómez Sánchez
¿Qué son los patrones?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Qué son los patrones?
Un patrón es una posible solución a un problema que se nos plantea
de forma que problemas con planteamientos similares puedan ser
resueltos de forma similar.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Qué define un patrón?
● Nombre
● Problema que resuelve
● Estructura
● Consecuencias
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Qué tipos existen?
Creación Estructura
Comportamiento
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Qué tipos existen?
● Creación:
○ Abstract Factory.
○ Builder.
○ Singleton.
● Estructura:
○ Adapter.
○ Facade.
○ Bridge.
● Comportamiento:
○ Command.
○ State.
○ Memento.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Ventajas
● Cada patrón es una solución plausible y definida para problemas concretos.
● Facilitan la reutilización de estructuras y evitar duplicación de código.
● Facilitan la extensibilidad de código y aceleran el tiempo de desarrollo a largo
plazo.
● Desacoplan el código.
● Favorecen el cambio.
● Reducen los esfuerzos de mantenimiento.
● Suelen suponer una mejor asignación de responsabilidades.
● Plantean un vocabulario común.
● Resuelves problemas ya resueltos por otros desarrolladores.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Inconvenientes
● No es sencillo identificar qué patrón aplicar.
● Pueden suponer una sobrecarga de trabajo a corto plazo.
● No siempre es trivial aplicar el patrón a un problema concreto.
● Pueden afectar al rendimiento.
● Pueden provocar la fiebre del patrón o muerte por refactor.
● Un patrón mal aplicado puede transformarse en un anti patrón.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Problema a resolver
● Mostrar un conjunto de vídeos en una lista.
● Los vídeos serán proporcionados por una API
externa.
● Los vídeos podrán ser de varios tipos:
○ Vídeos normales.
○ Vídeos populares.
○ Vídeos favoritos.
○ Vídeos en directo
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android
Adapter
Chain of
Responsibility
Memento
Model View
Controller
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Adapter
Nombre: Adapter.
Problema: Convertir la interfaz de una clase en
otra que el código cliente espera. Permite la
colaboración otra clase a pesar de tener una
interface incompatible.
Nuestro problema: Permitir que Android pinte
una serie de vistas sobre un ListView sin
conocer la implementación que le daremos en el
futuro.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Adapter
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Memento
Nombre: Memento.
Problema: Capturar y externalizar el estado de
un objeto interno, sin violar la encapsulación, de
modo que el objeto pueda ser restaurado a este
estado más tarde.
Nuestro problema: Guardar el estado de la
actividad para recuperarlo ante un reinicio del
ciclo de vida de la misma.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Memento
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Chain of Responsibility
Nombre: Chain of Responsibility.
Problema: Evita acoplar el emisor de una
petición a su receptor dando a más de un objeto
la posibilidad de responder a una petición. Para
ello, se encadenan los receptores y pasa la
petición a través de la cadena hasta que es
procesada por algún objeto.
Nuestro problema: Notificar eventos a lo largo
de nuestra aplicación hasta que uno de los
receptores o varios decida procesarlo.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Chain of Responsibility
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Patrones en Android: Model View Controller
Nombre: Model View Controller.
Problema: Desacoplar la implementación de las
vistas y la de nuestro modelo.
Nuestro problema: Crear una aplicación de
forma que la implementación de nuestras vistas
y el modelo que implementa la lógica de negocio
no esten acopladas.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
UN ACTIVITY NO ES UN CONTROLADOR!!!
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Problema a resolver
Pintado de la lista Procedencia de los
datos
Casos de uso
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Nombre: Renderer.
Problema: Desacoplar el proceso de pintado de
elementos heterogéneos en una lista.
Nuestro problema: Tenemos vídeos de
diferentes tipos que tienen que pintarse de forma
diferente. Vídeos normales, vídeos populares,
vídeos favoritos y vídeos en directo.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Estructura: Este patrón es una combinación
de tres patrones.
● Builder: Separa la construcción de un objeto
complejo de su representación, así que el
mismo proceso de construcción pueda crear
diferentes representaciones.
● Delegate: Patrón aplicado cuando una clase
delega su implementación en otra clase que
actúa como helper.
● Template Method: Define el esqueleto de un
algoritmo en una operación, difiriendo
algunos pasos en las subclases.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Renderer
Builder: Crear o reciclar una vista en el método getView de un adapter es un
proceso de creación complicado que podemos implementar utilizando el patrón
builder.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Builder
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Template Method: Aplicando este patrón
podemos crear una estructura general
para el algoritmo de pintado de los
vídeos en la lista de forma que los
subtipos especialicen el algoritmo y
cambien o añadan el contenido que
deseen duplicando la menor cantidad de
código posible.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Template method
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Delegate: La implementación clásica de el método
getView se basa crear, reciclar y setear el contenido
de la vista para pintarla apropiadamente, con el
patrón delegate podremos delegar la
implementación del pintado de la vista sobre los
objetos de tipo Renderer.
Renderer
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Delegate: Con este cambio de implementación puede observarse cómo la
implementación que vimos en transparencias anteriores se ve reducida a la siguiente.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Merece la pena?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Resultado?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Renderer
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Un adaptador para adaptarlos a todos?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
https://github.com/pedrovgs/Renderers
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Repository
Nombre: Repository.
Problema: Abstraer el origen de datos de un
sistema con posibles fuentes de información.
Nuestro problema: Abstraer la procedencia de
los datos, si proceden de un sistema de
almacenamiento basado en memoria,
persistencia o si los datos proceden de la api.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Repository
Diferentes
implementaciones de la
interface repositorio pueden
ofrecer diferentes
prestaciones abstrayendo
por completo al resto del
sistema.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Por qué?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Qué importa si la aplicación tiene una
base de datos o un fichero o una API
externa?
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Repository
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Repository
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Command
Nombre: Command.
Problema: Encapsular un mensaje como un
objeto, permitiendo parametrizar los clientes
con diferentes solicitudes, añadir a una cola las
solicitudes y soportar undo redo.
Nuestro problema: Modelar los casos de uso de
la aplicación de forma que abstraigamos el
proceso de ejecución de los mismos.
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
Command Casos de uso
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Command
Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
Consejos prácticos
● Un modelo por dominio.
● Evitar la duplicidad de código.
● Refactorizar día a día.
● Cumplir el principio de responsabilidad única.
● Tomar las decisiones importantes cuando sea necesario.
● Pensar en el framework como un mecanismo de paso de
información.
● Desarrollar desde el caso de uso.
● Crear código testable.
● Escribir código para los compañeros no para la máquina
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
¿Preguntas?
http://corporate.tuenti.com/es/dev/blog - @TuentiEng
http://corporate.tuenti.com/es/jobs
Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s

Mais conteúdo relacionado

Destaque

Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013Rafael Vázquez Sánchez
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for AndroidPedro Vicente Gómez Sánchez
 
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...Conferencia Sindrome Metabolico
 
Decreto 073- 2013 (polvora)
Decreto 073- 2013 (polvora) Decreto 073- 2013 (polvora)
Decreto 073- 2013 (polvora) alconcepcion
 
Presentación LinkedIn MW
Presentación LinkedIn MWPresentación LinkedIn MW
Presentación LinkedIn MWMucha Web
 
Ludzie,Zachowania,Obyczaje
Ludzie,Zachowania,ObyczajeLudzie,Zachowania,Obyczaje
Ludzie,Zachowania,ObyczajeAneta Koziolko
 
Aiguamolls artificials per a la depuració d’efluents líquids
Aiguamolls artificials per a la depuració d’efluents líquidsAiguamolls artificials per a la depuració d’efluents líquids
Aiguamolls artificials per a la depuració d’efluents líquidscleanleach
 
1.1 android cep jaen 2015 introducción
1.1 android cep jaen 2015   introducción1.1 android cep jaen 2015   introducción
1.1 android cep jaen 2015 introducciónJose Antonio Vacas
 
Exemples Activitats Ma Centres
Exemples Activitats Ma CentresExemples Activitats Ma Centres
Exemples Activitats Ma Centresannagalobart
 

Destaque (20)

Software Design patterns on Android English
Software Design patterns on Android EnglishSoftware Design patterns on Android English
Software Design patterns on Android English
 
Kata Contacts
Kata ContactsKata Contacts
Kata Contacts
 
Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013
 
Karumi Dojo: Kata Maxibon
Karumi Dojo: Kata MaxibonKarumi Dojo: Kata Maxibon
Karumi Dojo: Kata Maxibon
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for Android
 
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...
Descripción del estado tiroideo en mujeres con distinto grado de obesidad y s...
 
Decreto 073- 2013 (polvora)
Decreto 073- 2013 (polvora) Decreto 073- 2013 (polvora)
Decreto 073- 2013 (polvora)
 
ISIC Magazine 2010-2011
ISIC Magazine 2010-2011ISIC Magazine 2010-2011
ISIC Magazine 2010-2011
 
CATALUNYA. CAMINO A LA SECESIÓN
CATALUNYA. CAMINO A LA SECESIÓNCATALUNYA. CAMINO A LA SECESIÓN
CATALUNYA. CAMINO A LA SECESIÓN
 
Depliant CLSC
Depliant CLSCDepliant CLSC
Depliant CLSC
 
Manual de cgimail
Manual de cgimailManual de cgimail
Manual de cgimail
 
Presentación LinkedIn MW
Presentación LinkedIn MWPresentación LinkedIn MW
Presentación LinkedIn MW
 
Ludzie,Zachowania,Obyczaje
Ludzie,Zachowania,ObyczajeLudzie,Zachowania,Obyczaje
Ludzie,Zachowania,Obyczaje
 
Aiguamolls artificials per a la depuració d’efluents líquids
Aiguamolls artificials per a la depuració d’efluents líquidsAiguamolls artificials per a la depuració d’efluents líquids
Aiguamolls artificials per a la depuració d’efluents líquids
 
Cloud computing ppt_0
Cloud computing ppt_0Cloud computing ppt_0
Cloud computing ppt_0
 
STOREPARKER N2502 - Parking Semiautomático
STOREPARKER N2502 - Parking SemiautomáticoSTOREPARKER N2502 - Parking Semiautomático
STOREPARKER N2502 - Parking Semiautomático
 
Island Chl E Mail
Island   Chl   E MailIsland   Chl   E Mail
Island Chl E Mail
 
1.1 android cep jaen 2015 introducción
1.1 android cep jaen 2015   introducción1.1 android cep jaen 2015   introducción
1.1 android cep jaen 2015 introducción
 
CSEP_AEIS
CSEP_AEISCSEP_AEIS
CSEP_AEIS
 
Exemples Activitats Ma Centres
Exemples Activitats Ma CentresExemples Activitats Ma Centres
Exemples Activitats Ma Centres
 

Semelhante a Software design patterns on Android Spanish

392287381 lenguajes-para-programar-en-android
392287381 lenguajes-para-programar-en-android392287381 lenguajes-para-programar-en-android
392287381 lenguajes-para-programar-en-androidxavazque2
 
De Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreDe Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreJavier Suárez Ruiz
 
02 5 o8a-10231485-2-7t
02 5 o8a-10231485-2-7t02 5 o8a-10231485-2-7t
02 5 o8a-10231485-2-7tGabo Mizhel
 
Resolucion de guia
Resolucion de guiaResolucion de guia
Resolucion de guiareina vigil
 
Resolucion de guia
Resolucion de guiaResolucion de guia
Resolucion de guiareina vigil
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicaciónJose Antonio Vacas
 
TFG GII - HP SCDS Observatorio Tecnológico
TFG GII - HP SCDS Observatorio TecnológicoTFG GII - HP SCDS Observatorio Tecnológico
TFG GII - HP SCDS Observatorio TecnológicoCarlos López
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de softwareSaul mendoza valdez
 
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
 
JustiApps - Introducción al desarrollo de Apps para los no informáticos
JustiApps - Introducción al desarrollo de Apps para los no informáticosJustiApps - Introducción al desarrollo de Apps para los no informáticos
JustiApps - Introducción al desarrollo de Apps para los no informáticosAdolfo Sanz De Diego
 
Las apps
Las appsLas apps
Las appsKimora1
 
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...Meison Chirinos
 
Ponencia Final Dispositivos Móviles
Ponencia Final Dispositivos Móviles Ponencia Final Dispositivos Móviles
Ponencia Final Dispositivos Móviles Adán Silva
 

Semelhante a Software design patterns on Android Spanish (20)

392287381 lenguajes-para-programar-en-android
392287381 lenguajes-para-programar-en-android392287381 lenguajes-para-programar-en-android
392287381 lenguajes-para-programar-en-android
 
Migrando a Android O
Migrando a Android OMigrando a Android O
Migrando a Android O
 
Que es android studio
Que es android studioQue es android studio
Que es android studio
 
De Windows Phone App Studio a la Store
De Windows Phone App Studio a la StoreDe Windows Phone App Studio a la Store
De Windows Phone App Studio a la Store
 
02 5 o8a-10231485-2-7t
02 5 o8a-10231485-2-7t02 5 o8a-10231485-2-7t
02 5 o8a-10231485-2-7t
 
Resolucion de guia
Resolucion de guiaResolucion de guia
Resolucion de guia
 
Resolucion de guia
Resolucion de guiaResolucion de guia
Resolucion de guia
 
2.1 android cep jaen 2014 estructura de aplicación
2.1 android cep jaen 2014   estructura de aplicación2.1 android cep jaen 2014   estructura de aplicación
2.1 android cep jaen 2014 estructura de aplicación
 
TFG GII - HP SCDS Observatorio Tecnológico
TFG GII - HP SCDS Observatorio TecnológicoTFG GII - HP SCDS Observatorio Tecnológico
TFG GII - HP SCDS Observatorio Tecnológico
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de software
 
Android studio
Android studioAndroid studio
Android studio
 
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
 
JustiApps - Introducción al desarrollo de Apps para los no informáticos
JustiApps - Introducción al desarrollo de Apps para los no informáticosJustiApps - Introducción al desarrollo de Apps para los no informáticos
JustiApps - Introducción al desarrollo de Apps para los no informáticos
 
Agenda
AgendaAgenda
Agenda
 
Lenguajes de Programación: Android
Lenguajes de Programación: AndroidLenguajes de Programación: Android
Lenguajes de Programación: Android
 
Las apps
Las appsLas apps
Las apps
 
Desktop App Converter
Desktop App ConverterDesktop App Converter
Desktop App Converter
 
Diapoesatx
DiapoesatxDiapoesatx
Diapoesatx
 
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
Introducción al desarrollo de aplicaciones móviles con Android enfocado a emp...
 
Ponencia Final Dispositivos Móviles
Ponencia Final Dispositivos Móviles Ponencia Final Dispositivos Móviles
Ponencia Final Dispositivos Móviles
 

Software design patterns on Android Spanish

  • 1. Software Design Patterns on Android Pedro Vicente Gómez Sánchez - Mobile Software Engineer, Tuenti Technologies. @pedro_g_s , @TuentiEng pgomez@tuenti.com
  • 2. http://corporate.tuenti.com/es/dev/blog - @TuentiEng http://corporate.tuenti.com/es/jobs Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 3. ¿Por qué hablar de patrones cuando podríamos estar en el bar? Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 4. “Si vuelvo a ver anotaciones para parsing json en una clase del dominio de mi problema, me pego un tiro.” “Si vuelvo a ver un proyecto en el que no se use inyección de dependencias, me tiro por una ventana.” “Si vuelvo a ver un proyecto en el que cada clase tenga más de 7 dependencias, me mudo a la India.” “Si vuelvo a ver una clase de 3000 líneas de código, me paso a programar para iOS.” Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Pedro Gómez
  • 5. ● Introducción ● Problema a resolver. ● Patrones en Android. ● Patrón Renderer. ● Patrón Repository. ● Patrón Command. ● Consejos prácticos. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 6. DISCLAIMER Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 7. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 8. Software Design Patterns on Android - Pedro V. Gómez Sánchez
  • 9. Software Design Patterns on Android - Pedro V. Gómez Sánchez
  • 10. ¿Qué son los patrones? Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 11. ¿Qué son los patrones? Un patrón es una posible solución a un problema que se nos plantea de forma que problemas con planteamientos similares puedan ser resueltos de forma similar. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 12. ¿Qué define un patrón? ● Nombre ● Problema que resuelve ● Estructura ● Consecuencias Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 13. ¿Qué tipos existen? Creación Estructura Comportamiento Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 14. ¿Qué tipos existen? ● Creación: ○ Abstract Factory. ○ Builder. ○ Singleton. ● Estructura: ○ Adapter. ○ Facade. ○ Bridge. ● Comportamiento: ○ Command. ○ State. ○ Memento. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 15. Ventajas ● Cada patrón es una solución plausible y definida para problemas concretos. ● Facilitan la reutilización de estructuras y evitar duplicación de código. ● Facilitan la extensibilidad de código y aceleran el tiempo de desarrollo a largo plazo. ● Desacoplan el código. ● Favorecen el cambio. ● Reducen los esfuerzos de mantenimiento. ● Suelen suponer una mejor asignación de responsabilidades. ● Plantean un vocabulario común. ● Resuelves problemas ya resueltos por otros desarrolladores. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 16. Inconvenientes ● No es sencillo identificar qué patrón aplicar. ● Pueden suponer una sobrecarga de trabajo a corto plazo. ● No siempre es trivial aplicar el patrón a un problema concreto. ● Pueden afectar al rendimiento. ● Pueden provocar la fiebre del patrón o muerte por refactor. ● Un patrón mal aplicado puede transformarse en un anti patrón. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 17. Problema a resolver ● Mostrar un conjunto de vídeos en una lista. ● Los vídeos serán proporcionados por una API externa. ● Los vídeos podrán ser de varios tipos: ○ Vídeos normales. ○ Vídeos populares. ○ Vídeos favoritos. ○ Vídeos en directo Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 18. Patrones en Android Adapter Chain of Responsibility Memento Model View Controller Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 19. Patrones en Android: Adapter Nombre: Adapter. Problema: Convertir la interfaz de una clase en otra que el código cliente espera. Permite la colaboración otra clase a pesar de tener una interface incompatible. Nuestro problema: Permitir que Android pinte una serie de vistas sobre un ListView sin conocer la implementación que le daremos en el futuro. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 20. Patrones en Android: Adapter Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 21. Patrones en Android: Memento Nombre: Memento. Problema: Capturar y externalizar el estado de un objeto interno, sin violar la encapsulación, de modo que el objeto pueda ser restaurado a este estado más tarde. Nuestro problema: Guardar el estado de la actividad para recuperarlo ante un reinicio del ciclo de vida de la misma. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 22. Patrones en Android: Memento Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 23. Patrones en Android: Chain of Responsibility Nombre: Chain of Responsibility. Problema: Evita acoplar el emisor de una petición a su receptor dando a más de un objeto la posibilidad de responder a una petición. Para ello, se encadenan los receptores y pasa la petición a través de la cadena hasta que es procesada por algún objeto. Nuestro problema: Notificar eventos a lo largo de nuestra aplicación hasta que uno de los receptores o varios decida procesarlo. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 24. Patrones en Android: Chain of Responsibility Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 25. Patrones en Android: Model View Controller Nombre: Model View Controller. Problema: Desacoplar la implementación de las vistas y la de nuestro modelo. Nuestro problema: Crear una aplicación de forma que la implementación de nuestras vistas y el modelo que implementa la lógica de negocio no esten acopladas. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 26. UN ACTIVITY NO ES UN CONTROLADOR!!! Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 27. Problema a resolver Pintado de la lista Procedencia de los datos Casos de uso Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 28. Renderer Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com
  • 29. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer Nombre: Renderer. Problema: Desacoplar el proceso de pintado de elementos heterogéneos en una lista. Nuestro problema: Tenemos vídeos de diferentes tipos que tienen que pintarse de forma diferente. Vídeos normales, vídeos populares, vídeos favoritos y vídeos en directo.
  • 30. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer Estructura: Este patrón es una combinación de tres patrones. ● Builder: Separa la construcción de un objeto complejo de su representación, así que el mismo proceso de construcción pueda crear diferentes representaciones. ● Delegate: Patrón aplicado cuando una clase delega su implementación en otra clase que actúa como helper. ● Template Method: Define el esqueleto de un algoritmo en una operación, difiriendo algunos pasos en las subclases.
  • 31. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Renderer Builder: Crear o reciclar una vista en el método getView de un adapter es un proceso de creación complicado que podemos implementar utilizando el patrón builder.
  • 32. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Builder
  • 33. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer Template Method: Aplicando este patrón podemos crear una estructura general para el algoritmo de pintado de los vídeos en la lista de forma que los subtipos especialicen el algoritmo y cambien o añadan el contenido que deseen duplicando la menor cantidad de código posible.
  • 34. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Template method
  • 35. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer Delegate: La implementación clásica de el método getView se basa crear, reciclar y setear el contenido de la vista para pintarla apropiadamente, con el patrón delegate podremos delegar la implementación del pintado de la vista sobre los objetos de tipo Renderer. Renderer
  • 36. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer Delegate: Con este cambio de implementación puede observarse cómo la implementación que vimos en transparencias anteriores se ve reducida a la siguiente.
  • 37. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer
  • 38. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Merece la pena?
  • 39. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Resultado?
  • 40. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s
  • 41. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer
  • 42. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Renderer
  • 43. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Un adaptador para adaptarlos a todos?
  • 44. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s https://github.com/pedrovgs/Renderers
  • 45. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Repository Nombre: Repository. Problema: Abstraer el origen de datos de un sistema con posibles fuentes de información. Nuestro problema: Abstraer la procedencia de los datos, si proceden de un sistema de almacenamiento basado en memoria, persistencia o si los datos proceden de la api.
  • 46. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Repository Diferentes implementaciones de la interface repositorio pueden ofrecer diferentes prestaciones abstrayendo por completo al resto del sistema.
  • 47. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s ¿Por qué?
  • 48. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s ¿Qué importa si la aplicación tiene una base de datos o un fichero o una API externa?
  • 49. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Repository
  • 50. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Repository
  • 51. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Command Nombre: Command. Problema: Encapsular un mensaje como un objeto, permitiendo parametrizar los clientes con diferentes solicitudes, añadir a una cola las solicitudes y soportar undo redo. Nuestro problema: Modelar los casos de uso de la aplicación de forma que abstraigamos el proceso de ejecución de los mismos.
  • 52. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s Command Casos de uso
  • 53. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Command
  • 54. Software Design Patterns on Android - Pedro V. Gómez Sánchez - pgomez@tuenti.com Consejos prácticos ● Un modelo por dominio. ● Evitar la duplicidad de código. ● Refactorizar día a día. ● Cumplir el principio de responsabilidad única. ● Tomar las decisiones importantes cuando sea necesario. ● Pensar en el framework como un mecanismo de paso de información. ● Desarrollar desde el caso de uso. ● Crear código testable. ● Escribir código para los compañeros no para la máquina
  • 55. Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s ¿Preguntas?
  • 56. http://corporate.tuenti.com/es/dev/blog - @TuentiEng http://corporate.tuenti.com/es/jobs Software Design Patterns on Android - Pedro V. Gómez Sánchez - @pedro_g_s