Documentos de Académico
Documentos de Profesional
Documentos de Cultura
sbado, 19 de octubre de 13
http://corporate.tuenti.com/es/dev/blog
@TuentiEng
sbado, 19 de octubre de 13
- Introduccin - Problema a resolver - Patrones en Android - Patrn Renderer - Patrn Repository - Patrn Command - Consejos prcticos
sbado, 19 de octubre de 13
sbado, 19 de octubre de 13
sbado, 19 de octubre de 13
sbado, 19 de octubre de 13
Qu tipos existen?
Creacin
Estructura
Comportamiento
sbado, 19 de octubre de 13
Qu tipos existen?
- Creacin
Singleton Abstract Factory Builder
- Estructura
Adapter Facade Bridge
- Comportamiento
Command State Memento
sbado, 19 de octubre de 13
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
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
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
Patrones en Android
Adapter
Memento
Chain of Responsibilities
sbado, 19 de octubre de 13
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
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
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
- 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
Problema a resolver
Pintado de la lista
Casos de uso
sbado, 19 de octubre de 13
Renderer
sbado, 19 de octubre de 13
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
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
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
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
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
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
Renderer
sbado, 19 de octubre de 13
Renderer
sbado, 19 de octubre de 13
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.
sbado, 19 de octubre de 13
Repository
Diferentes implementaciones de la interface repositorio pueden ofrecer diferentes prestaciones abstrayendo por completo al resto del sistema.
sbado, 19 de octubre de 13
sbado, 19 de octubre de 13
sbado, 19 de octubre de 13
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
Command
UI Casos de uso
Application
OS
sbado, 19 de octubre de 13
Command
sbado, 19 de octubre de 13
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
Preguntas?
sbado, 19 de octubre de 13