En este artículo haré una reseña del libro Node.js Design Patterns, de los autores Mario Casciaro y Luciano Mammino, de la editorial Packt.
Esta obra reúne una extensa variedad de prácticas comunes y patrones de diseño que se pueden aplicar en Node.js. Abarca temas avanzados como las características internas de Node, el sistema de módulos, eventos, funciones asíncronas, streams y los clásicos patrones de diseño.
Contenido
- 1 Un libro avanzado
- 2 Los temas que abarca el libro
- 2.1 Capítulo 1 – La plataforma de Node.js
- 2.2 Capítulo 2 – El sistema de módulos
- 2.3 Capítulo 3 – Callbacks y eventos
- 2.4 Capítulo 4 – Patrones de control de flujo asíncrono con callbacks
- 2.5 Capítulo 5 – Patrones de control de flujo asíncrono con promesas, async y await
- 2.6 Capítulo 6 – Programando con streams
- 2.7 Capítulo 7 – Patrones de diseño creacionales
- 2.8 Capítulo 8 – Patrones de diseño estructurales
- 2.9 Capítulo 9 – Patrones de diseño de comportamiento
- 2.10 Capítulo 10 – Aplicaciones universales de JavaScript
- 2.11 Capítulo 11, 12 y 13
- 3 ¿Vale la pena Node.js Design Patterns?
- 4 ¿Dónde conseguir este libro?
- 5 Más contenido en Crónicas Freelancer
Un libro avanzado
Esta obra no te va a explicar la sintaxis básica de JavaScript. Si buscás una obra que te guíe por todos los aspectos del lenguaje, te recomiendo JavaScript the Definitive Guide, de Flanagan, libro que ya he reseñado en este blog.
En mi caso particular, me interesaba ver la aplicación de los patrones de diseño clásicos que yo solía usar en Java y PHP. Algo me decía que tendrían que ser diferentes en JavaScript.
Comencé a leer el libro por los patrones de diseño y Node.js Design Patterns me recibió de forma áspera. Antes de entender los patrones, el libro hace una introducción bastante profunda al funcionamiento interno de Node.js.
Si bien no me esperaba eso, tampoco me desagradó, aunque admito, me costó un poco seguir el código.
Esta aclaración que te hago ahora es importante que la tengas en cuenta dado que el nivel del libro no baja nunca hasta el final. Es una obra avanzada de programación y para seguir el código hay que prestar atención y releer varias veces.
Los temas que abarca el libro
A continuación te voy a contar de qué trata cada capítulo del libro.
Capítulo 1 – La plataforma de Node.js
¿Sabés cómo funciona Node.js por dentro? ¿No? Bueno, no te preocupes, este capítulo te enseña la filosofía de Node. Luego, con diagramas y todo, te muestra por qué Node es tan rápido.
Verás temas como Blocking I/O y Non-Blocking I/O y cómo funciona el núcleo de Node.js.
Si bien es lo lógico que este capítulo sea el primero, creo que es un recibimiento bastante hosco para el lector. Yo lo hubiera dejado para un apéndice o un capítulo más adelante.
Capítulo 2 – El sistema de módulos
Este capítulo te explica la necesidad de tener un sistema de módulos y también las diferencias entre CommonJS y ESM. Pero el libro no se queda en lo superficial (nunca lo hace) y te muestra con ejemplos como funcionan estos sistemas de módulos.
Verás paso a paso en un ejemplo cómo se van cargando los archivos y cómo se resuelven las dependencias.
Capítulo 3 – Callbacks y eventos
Estos son temas que ni me esperaba ver en este libro, pero al leerlos, su presencia se me hizo natural. La primera parte habla del patrón callback y la segunda, del patrón Observer, pero en este último caso, utilizando el EventEmitter de Node.js.
Capítulo 4 – Patrones de control de flujo asíncrono con callbacks
Lo más interesante de este capítulo es la creación de un web spider utilizando callbacks y evitando el famoso callback hell. Se explica cuáles son las técnicas más utilizadas para lograr ejecuciones asíncronas secuenciales y en paralelo.
Capítulo 5 – Patrones de control de flujo asíncrono con promesas, async y await
En algún punto de mi mente, este capítulo sobreescribió al anterior. Lo que ocurre es que con el uso de promesas, async y await, todo lo asíncrono de Node.js se vuelve bastante más fácil de manejar.
El capítulo te explica qué es una promesa y cómo es su API. Cómo crear una promesa y cómo agrupar promesas. Luego, ves cómo usar las promesas con async y await para hacer todo un poco más sencillo.
Este es uno de esos temas que podés encontrar en cualquier libro de JavaScript, pero cuidado porque en Node.js Design Patterns siempre se le da una vuelta de tuerca más y se lo examina con un nivel de detenimiento mayor.
Capítulo 6 – Programando con streams
Lejos, este es el capítulo que más me gustó. Empieza de cero con streams, explicando los tipos que existen, de lectura, escritura, dúplex, de transformación y otros más.
Creo que este capítulo se te hace más fácil si has trabajado previamente con streams en algún otro lenguaje.
Luego de comprender cómo se usan los streams y para qué, verás nuevos métodos de control asíncrono de flujo pero ahora usando streams.
Finalmente, aprenderás sobre pipelines: combinando, bifurcando, unificando y multiplexando y demultiplexando streams.
Este capítulo tiene una particularidad que desconozco si los otros también la tienen. Uno de los autores creó un Workshop gratuito en GitHub para practicar todos los temas, con ejercicios simples pero interesantes.
Yo empecé el workshop mientras hacía otras cosas, pero me parece que requiere más dedicación así que lo dejé para cuando disponga de más tiempo y me pueda poner un par de horitas un mismo día. Te recomiendo que hagas lo mismo.
Capítulo 7 – Patrones de diseño creacionales
¡Y finalmente llegaron los patrones de diseño clásicos! Sin embargo, antes de comenzar la sección, el libro hace una aclaración demoledora para los ávidos curiosos de los patrones de diseño OOP como yo.
Los autores aclaran que los patrones de diseño clásicos en JavaScript muchas veces quedan relegados por limitaciones propias del lenguaje y por la preferencia del mismo sobre la programación funcional.
«¡Genial! Me fumé medio libro para nada», pensé. Sin embargo, aprendí mucho así que no me puedo quejar.
Los primeros que se presentan son los patrones de diseño creacionales: Factory, Builder, Revealing Constructor, Singleton y cómo conectar módulos con inyecciones de dependencias.
Creo que lo más interesante de las explicaciones son las salvedades que se hacen con el Singleton en JavaScript.
Capítulo 8 – Patrones de diseño estructurales
Aquí se explica la versión JavaScript de los viejos y queridos patrones estructurales: Proxy, Decorador y Adapter.
Este capítulo es una mezcla de desilusión con alivio, ya que personalmente no encontré nada nuevo. Las implementaciones son lógicas y similares a lo ya conocido.
Capítulo 9 – Patrones de diseño de comportamiento
Nuevamente, aparecen patrones conocidos por todos: Strategy, State, Template, Iterator, Middleware y Command.
El más relevante, desde el punto de vista de JavaScript y Node.js es sin dudas el Iterator que se utiliza con los Generators.
Capítulo 10 – Aplicaciones universales de JavaScript
El título de este capítulo me intrigaba mucho. ¿A qué se refiere con aplicaciones universales? Básicamente, lo que te explica es cómo crear aplicaciones de JavaScript que funcionen tanto en el navegador como en el servidor.
Personalmente, no me pareció tan interesante. En general, las aplicaciones que uno escribe o bien se ejecutan en un navegador, o bien en el servidor.
En este capítulo hay una introducción a React que no te recomiendo para nada. Si te interesa React, buscá la documentación oficial, libros o tutoriales online, con indicaciones mucho más amigables.
Capítulo 11, 12 y 13
Los últimos tres capítulos del libro no los he leído aún. En esta primera etapa de aprendizaje de temas avanzados de Node.js me parecieron un poco lejanos.
Sin dudas los voy a leer más adelante, pero antes que eso, prefiero repasar los capítulos anteriores, haciendo, por ejemplo, el mencionado workshop de streams.
De todos modos, te cuento de qué trata cada capítulo.
El capítulo 11 es sobre recetas avanzadas vinculadas al manejo de operaciones asíncronas y sobre cómo correr tareas atadas a la CPU.
El capítulo 12 es sobre escalabilidad y patrones arquitectónicos. Comienza con una introducción al escalado y hay temas como clonado y balanceo de carga.
El capítulo 13 es el último del libro e incluye temas vinculados a Messaging y al Integration Pattern, usados en microservicios. Se explica el Publish/Subscribe Pattern y se utiliza ZeroMQ.
¿Vale la pena Node.js Design Patterns?
Sí, es uno de esos libros que vale la pena leer, pero más que nada, vale la pena releer. Para mí, la lectura de Node.js Design Patterns no se terminó cuando dejé el libro en el capítulo 10.
Mientras sigo estudiando JavaScript, Node.js y las librerías como React y Vue, los conocimientos se van amalgamando en mi mente. Cada tanto vuelvo al libro para chequear algo y estoy seguro de que pronto voy a retomarlo.
Como te comentaba antes, creo que primero voy a releer algún capítulo antes de encarar los tres que me faltan.
El único consejo que te quiero dar es que si lo empezás a leer y no entendés nada, no te preocupes. Dejalo y leete JavaScript the Definitive Guide de Flanagan. O ponete a programar en Node.js durante un tiempo. Después, volvé e intentalo de nuevo. En algún momento vas a estar a la altura del libro para poder comprenderlo en su totalidad.
Yo no lo entendí al 100%. Hay partes que me parecieron más difíciles que otras. Las de los patrones clásicos fueron las más fáciles para mí.
Desde ya, el libro está en inglés y dudo que exista una versión traducida al español. Como digo siempre, el primer lenguaje que tiene que dominar un programador no es ni Python ni JavaScript ni ninguno de esos: es el inglés.
En definitiva, te recomiendo mucho este libro.
¿Dónde conseguir este libro?
La mejor opción es comprarlo en Amazon. Te dejo mis enlaces de afiliado:
Comprar Node.js Design Patters en Amazon de Estados Unidos y Amazon de España.
Buscá siempre la tercera edición de este libro que, hasta el momento, es la última y más actualizada.
Más contenido en Crónicas Freelancer
Espero que este artículo te haya gustado. Si leíste este libro y te interesa dar tu opinión, dejame tu comentario al final del artículo.
Si estás buscando hosting, te recomiendo Digital Ocean. Seguí este enlace para obtener US$ 200 de crédito para usar en un periodo de 60 días.
Te invito a que me sigas en las redes: LinkedIn, X, GitHub e Instagram. También estoy en CodeWars, plataforma que te recomiendo para practicar ejercicios de programación.
También te podés suscribir a la lista de correo de este blog para recibir las novedades en tu correo electrónico.
Eso es todo. Muchas gracias por tomarte el tiempo de leerme.
Hasta la próxima.