Sie sind auf Seite 1von 35

Pedro V.

Gmez Snchez Software Design Patterns on Android

pgomez@tuenti.com - Tuenti Technlogies

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

http://corporate.tuenti.com/es/dev/blog

@TuentiEng

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro V. Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

- Introduccin - Problema a resolver - Patrones en Android - Patrn Renderer - Patrn Repository - Patrn Command - Consejos prcticos

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Qu son los Patrones?


Un patrn es una posible solucin a un problema que se nos plantea de forma que problemas con planteamientos similares puedan ser resueltos de forma similar.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Qu tipos existen?

Creacin

Estructura

Comportamiento
sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Qu tipos existen?
- Creacin
Singleton Abstract Factory Builder

- Estructura
Adapter Facade Bridge

- Comportamiento
Command State Memento

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Ventajas
- Cada patrn es una solucin plausible y definida para problemas concretos. - Facilitan la reutilizacin de estructuras y evitan duplicacin de cdigo. - Facilitan la extensibilidad de cdigo y aceleran el tiempo de desarrollo a largo plazo. - Desacoplan el cdigo. - Favorecen el cambio. - Reducen los esfuerzos de mantenimiento. - Suelen suponer una mejor asignacin de responsabilidades. - Plantean un vocabulario comn. - Resuelves problemas ya resueltos por otros desarrolladores.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Inconvenientes
- No es sencillo identificar qu patrn aplicar. - Pueden suponer una sobrecarga de trabajo a corto plazo. - No siempre es trivial aplicar el patrn a un problema concreto. - Pueden afectar al rendimiento. - Pueden provocar la fiebre del patrn o muerte por refactor. - Un patrn mal aplicado puede transformarse en un anti patrn.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Problema a resolver
- Mostrar un conjunto de vdeos en una lista. - Los vdeos sern proporcionados por una API externa. - Los vdeos podrn ser de varios tipos: - Vdeos normales. - Vdeos favoritos. - Vdeos populares. - Vdeos en directo.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Patrones en Android

Adapter

Memento

Chain of Responsibilities

Model View Controller

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Adapter
- Nombre: Adapter. - Problema: Este patrn est planteado para ofrecer una interfaz amigable sobre un sistema ya implementado de forma que el cdigo cliente puede trabajar con la interface que l espera.

- Nuestro problema: Permitir que Android pinte una serie de vistas sobre un ListView sin conocer la implementacin que le daremos en el futuro.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Memento
- Nombre: Memento - Problema: Almacenar el estado de un objeto en un momento dado para su posterior recuperacin de una forma sencilla. - Nuestro problema: Navegar por diferentes activities o fragments de la aplicacin siendo capaces de recuperar el estado de los mismos al volver a su ciclo de vida activo.

Este patrn se aplica cuando el dispositivo pasa de landscape a portrat y viceversa y el ciclo de vida del activity es reiniciado.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Chain of Responsability
- Nombre: Chain of Responsability - Problema: Desacoplar el receptor de un mensaje del emisor dndo la oportunidad de que varios receptores procesen el evento, uno de los receptores puede decidir parar la propagacin del evento. - Nuestro problema: Notificar eventos a lo largo de nuestra aplicacin hasta que uno de los receptores o varios decida procesarlo.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Model View Controller


- Nombre: Model View Controller

- Problema: Desacoplar la implementacin de las vistas y la de nuestro modelo nuestro modelo.

- Nuestro problema: Crear una aplicacin de forma que la implementacin de nuestras vistas y el modelo que implementa la lgica de negocio no esten acopladas.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Problema a resolver

Pintado de la lista

Procedencia de los datos

Casos de uso

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Nombre: Renderer - Problema: Desacoplar el proceso de pintado de elementos heterogneos en una lista. - Nuestro problema: Tenemos vdeos de diferentes tipos que tienen que pintarse de forma diferente. Vdeos normales, vdeos populares, vdeos favoritos y vdeos en directo.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Estrcutura: Este patrn es una combinacin de tres patrones. - Builder: Patrn de creacin para desacoplar el proceso de creacin de objetos complejos del cdigo cliente. - Delegate: Patrn aplicado cuando una clase delega su implementacin en otra clase que acta como helper. - Template Method: Patrn de comportamiento basado en la declaracin de mtodos que declaran las partes de un algoritmo y que son implementaods por los subtipos de la clase base.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Builder: Crear o reciclar una vista en el mtodo getView de un adapter es un proceso de creacin complicado que podemos implementar utilizando el patrn builder.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Template Method: Aplicando este patrn podemos crear una estructura general para el algoritmo de pintado de los vdeos en la lista de forma que los subtipos especialicen el algoritmo y cambien o aadan el contenido que deseen duplicando la menor cantidad de cdigo posible.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Delegate: La implementacin clsica de el mtodo getView se basa crear, reciclar y setear el contenido de la vista para pintarla apropiadamente, con el patrn delegate podremos delegar la implementaicn del pintado de la vista sobre los objetos de tipo Renderer.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer
- Delegate: Con este cambio de implementacin puede observarse cmo la implementacin que vimos en transparencias anteriores se ve reducida a la siguiente.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Renderer

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Repository
- Nombre: Repository - Problema: Abstraer el origen de datos de un sistema con posibles fuentes de informacin.

- 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.

Procedencia de los datos

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Repository
Diferentes implementaciones de la interface repositorio pueden ofrecer diferentes prestaciones abstrayendo por completo al resto del sistema.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Command
- Nombre: Command - Problema: Encapsular el comportamiento de una unidad de trabajo. - Nuestro problema: Modelar los casos de uso de la aplicacin de forma que abstraigamos el proceso de ejecucin de los mismos.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Command
UI Casos de uso

Application

OS

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Command

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Consejos
- Duplicidad de modelos de dominio. - Evitar la duplicidad de cdigo. - Intentar abstraer cada componente. - Cumplir el principio de responsabilidad nica. - Tomar las decisiones importantes cuando sea necesario. - Pensar en el framework como un mecanismo de paso de informacin. - Desarrollar desde el caso de uso. - Crear cdigo testable.

sbado, 19 de octubre de 13

Software Design Patterns on Android


Pedro Gmez Snchez pgomez@tuenti.com - @pedro_g_s - Tuenti Technologies

Preguntas?

sbado, 19 de octubre de 13

Das könnte Ihnen auch gefallen