1 of 28

GESDATOS, Grupo de investigación

1

2017-1

Realizado por:

  • Cristian Bravo
  • Sebastián Otálora

CAPÍTULO 4Design Patterns

Node.js Desing patterns, Mario casciaro

2 of 28

GESDATOS, Grupo de investigación

2

2017-1

CONTENIDO

  • Introducción
  • Factory
  • Proxy
  • Decorator
  • Adapter
  • Strategy
  • State
  • Template
  • Middleware
  • Command

3 of 28

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.

4 of 28

Factory

GESDATOS, Grupo de investigación

4

2017-1

  • Forma para crear objetos, en la cuál podemos separar la creación del objeto de su implementación.

  • La ventaja principal es que se obtiene una forma más flexible y controlada de crear objetos.

Forma normal:

Simple factory:

Ejemplo para crear un Objeto “Image”

5 of 28

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”

6 of 28

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

7 of 28

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

8 of 28

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:

9 of 28

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

10 of 28

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

11 of 28

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

12 of 28

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

13 of 28

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

14 of 28

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:

  • LevelUP API. En : https://github.com/rvagg/node-levelup/wiki/ Modules#storage-back-ends.
  • Jugglingdb: Multi-database. En https://github.com/1602/jugglingdb/tree/master/lib/ adapters.
  • levelfilesystem (https://www.npmjs.org/package/level-filesystem), implementación de un API en LevelUP

15 of 28

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)

16 of 28

Strategy

GESDATOS, Grupo de investigación

16

2017-1

Ejemplo:

Tenemos una clase Config que permite serializar o deserializar archivos

17 of 28

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

18 of 28

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)

19 of 28

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)

20 of 28

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

21 of 28

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)

22 of 28

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

23 of 28

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.

24 of 28

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)

25 of 28

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:

26 of 28

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

27 of 28

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.

  • Factory puede la flexibilidad del código .
  • Proxy, Decorator y Adapter permiten manipular, extender y adaptar las interfaces de los objetos.
  • Strategy, State y Template permiten dividir una función o algoritmo en partes pequeñas .
  • Middleware permite procesar datos usando un formato simple, extensible.
  • Command proporciona una abstracción para hacer cualquier operación más flexible y potente.

28 of 28

GESDATOS, Grupo de investigación

28

2017-1

REFERENCIAS

  • Casciaro, Mario (2014). Node.js Desing Patterns. Packt Publishing.