GESDATOS, Grupo de investigación
1
2017-1
Realizado por:
CAPÍTULO 4�Design Patterns
Node.js Desing patterns, Mario casciaro
GESDATOS, Grupo de investigación
2
2017-1
CONTENIDO
Introducción
GESDATOS, Grupo de investigación
3
2017-1
Un patrón de diseño es una solución reusable a un problema recurrente. Popularizados en el libro “Design Patterns: Elements of Reusable Object-Oriented Software”.
Debido a que JavaScript es un lenguaje multi-paradigma, existen muchas formas de llevar a cabo una tarea en él. Por este motivo, la aplicación de patrones de diseño no es tan lineal como en un lenguaje netamente orientados a objetos.
Dado este contexto, pueden haber muchas formas de implementar un patrón en JavaScript, por lo que este mismo dejaría de ser un “patrón”. Sin embargo, la idea base de cada patrón de diseño no cambia, haciendo posible su implementación dado un problema específico.
Factory
GESDATOS, Grupo de investigación
4
2017-1
Forma normal:
Simple factory:
Ejemplo para crear un Objeto “Image”
Factory
GESDATOS, Grupo de investigación
5
2017-1
También permite separar clases en varias bajo la misma implementación
A partir de la misma función puede crear diferentes tipos de “Image”. Esto no es posible con “new”
Por otro lado Factory puede proveer una forma de encapsulamiento
En el ej. las propiedades solo pueden ser accesibles a través de la interface “persona”
Factory
GESDATOS, Grupo de investigación
6
2017-1
Algunos paquetes para crear Factories en Node.js son:
Un ejemplo pequeño de implementación es: https://youtu.be/BS1zWPl5Rw8
Proxy
GESDATOS, Grupo de investigación
7
2017-1
Objeto que controla el acceso a otro objeto, generalmente
llamado “Subject”.
Casciaro (2014)
Como se ve en la imagen, proxy intercepta operaciones que deben ser realizadas por Subject agregando un comportamiento de pre y post-procesamiento. Generalmente el Proxy y el Subject comparten la misma Interfaz
Proxy
GESDATOS, Grupo de investigación
8
2017-1
Validación de Datos
Seguridad
Mantener una caché
Retrasar procesos de ser necesario
Procesos de Logueo
Manejo de Objetos remotos
Útil cuando:
Proxy
GESDATOS, Grupo de investigación
9
2017-1
Composición de Objeto
Técnica para implementar Proxy en la cual se combinan objetos con el propósito de extender o usar unas funcionalidades
Objeto con la misma
Interfaz de Subject
Interceptal al método hello del subject
Delegar goodbye al subject
Proxy
GESDATOS, Grupo de investigación
10
2017-1
Aumento de Objeto
Técnica para implementar Proxy en la cual se modifica directamente el Subject reemplazando sus métodos por la implementación del Proxy
Llamado y reemplazo de la función hello por helloOrig
Un ejemplo básico de implementación es: https://youtu.be/adazFAtlWIk
Decorator
GESDATOS, Grupo de investigación
11
2017-1
Patrón estructural que permite añadir comportamientos a un objeto de forma dinámica
Se añade el comportamiento a una instancia de una clase y no a la clase como tal.
Casciaro (2014)
En la imagen el Decorador extiende Component añadiendo un método nuevo
Decorator
GESDATOS, Grupo de investigación
12
2017-1
Permite añadir nuevos métodos directamente a un objeto decorador
Object Augmentation
Nuevo método para el objeto
Un ejemplo básico de implementación es: https://youtu.be/jWOX955FVMQ
Adapter
GESDATOS, Grupo de investigación
13
2017-1
Patrón que permite acceder a funcionalidades de un objeto usando otra interfaz
Casciaro (2014)
En la imagen se observa como Adapter es una envoltura de Adaptee y proporciona una interfaz para acceder a los métodos de Adaptee
Adapter
GESDATOS, Grupo de investigación
14
2017-1
Algunos de los usos más comunes de Adapter son creando interfaces para acceder a Bases de Datos:
Strategy
GESDATOS, Grupo de investigación
15
2017-1
Permite a un objeto manejar variaciones en su lógica y realizar diferentes acciones llamadas Estrategias dependiendo de diferentes factores. Generalmente las estrategias son una familia de soluciones implementadas en una misma interfaz, como se ve en la imagen
Casciaro (2014)
Strategy
GESDATOS, Grupo de investigación
16
2017-1
Ejemplo:
Tenemos una clase Config que permite serializar o deserializar archivos
Strategy
GESDATOS, Grupo de investigación
17
2017-1
Ejemplo:
Se define estrategias para manejar archivos dependiendo si son .json o .ini
Prueba de implementación de Config con las diferentes estrategias de serialización
State
GESDATOS, Grupo de investigación
18
2017-1
Variación del patrón Strategy en donde el contexto para aplicar una estrategia está dado por un Estado.
Esto permite que se pueda cambiar la estrategia de forma dinámica, a diferencia de Strategy.
Casciaro (2014)
Template
GESDATOS, Grupo de investigación
19
2017-1
Define una clase abstracta llamada Template en la cuál algunos elementos y métodos están indefinidos o son inciertos.
Luego se implementan subclases llamadas Templates Methods en las cuales se complementan los elementos faltantes del Template
Casciaro (2014)
Template
GESDATOS, Grupo de investigación
20
2017-1
Ejemplo:
Clase ConfigTemplate se crea como un Template
Clase JsonConfig creada a partir del Template, especificando los métodos del Template
Middleware
GESDATOS, Grupo de investigación
21
2017-1
En node.js se considera como un conjunto de procesadores, filtros y manejadores bajo funciones conectadas que forman una secuencia asíncrona para pre-procesar y post-procesar cualquier tipo de datos.
El Middeware Manager es el encargado de ejecutar y organizar las funciones a implementar.
Casciaro (2014)
Middleware
GESDATOS, Grupo de investigación
22
2017-1
EJEMPLO
En las imágenes se describe un middlewareManager en la cual se manejan las tareas send y use y se ejecutan por medio de un iterator
Middleware
GESDATOS, Grupo de investigación
23
2017-1
EJEMPLO
En la imagen se crea una tarea Middleware para manejar archivos json, se implementa un inbound y outbound.
Se implementa llamando el Middleware Manager y la tarea Middleware.
Command
GESDATOS, Grupo de investigación
24
2017-1
Es un objeto que encapsula información necesaria para ejecutar una tarea. En vez de invocar un método de forma directa, se crea un objeto que representa la intención de hacerla y será responsabilidad de otro componente ejecutarla
Client: Crea un Command y un invoker
Command: Encapsula información
Invoker: Responsable de ejecutar la tarea
Target: El sujeto de la invocación
Casciaro (2014)
Command
GESDATOS, Grupo de investigación
25
2017-1
Programar tareas
Crear historial de operaciones
Sincronización de algoritmos
Transformación de datos
Revertir operaciones
Uso de transacciones atómicas
Útil cuando:
Command
GESDATOS, Grupo de investigación
26
2017-1
La implementación más práctica es con la creación de Task.
Un ejemplo básico de implementación es: https://youtu.be/fQQ85Qj8mqw
Conclusiones
GESDATOS, Grupo de investigación
27
2017-1
Los tradicionales patrones de programación GoF pueden ser implementados en node.js transformándolos, adaptándolos, simplificándolos y demás.
GESDATOS, Grupo de investigación
28
2017-1
REFERENCIAS