7 claves para estructurar su aplicación Node.js

Rahul Mhatre es arquitecto técnico en Built.io.

Node.js se está poniendo al día rápidamente con Java, Ruby, Python y .Net como lenguaje preferido para desarrollar nuevas aplicaciones web. El equipo de Node.js está haciendo que el tiempo de ejecución de JavaScript sea mejor, más rápido y más sólido con cada día que pasa. Y la comunidad de usuarios está creciendo rápidamente.

A medida que la adopción continúa aumentando, más y más desarrolladores subirán la curva de aprendizaje de Node.js, enfrentando problemas similares y codificando funcionalidades similares. Afortunadamente, la comunidad de Node.js ha venido al rescate con marcos y patrones de diseño que no solo resuelven problemas comunes, sino que también ayudan a estructurar aplicaciones.

Los marcos generalmente implementan patrones MV como MVC (modelo-vista-controlador), MVVM (modelo-vista-vista-modelo), MVP (modelo-vista-presentador) o simplemente MV. También le dicen dónde debe estar el código para modelos, vistas y controladores, dónde deben estar sus rutas y dónde debe agregar sus configuraciones. Muchos desarrolladores jóvenes y entusiastas de Node.js no comprenden realmente cómo los patrones de diseño o los diagramas de programación orientada a objetos (OOP) se asignan a las líneas o la estructura del código en su aplicación.

Ahí es donde entran en juego los marcos de trabajo Node.js como Express.js y Sails.js. Estos y muchos otros están disponibles para ayudar a impulsar el desarrollo de aplicaciones web. Independientemente del marco que utilice, deberá tener en cuenta ciertas consideraciones al estructurar su aplicación.

Estos son los siete puntos clave que contemplo antes de trazar una aplicación Node.js.

1. La estructura de directorio adecuada para la aplicación

Al decidir la estructura de directorios de su aplicación, debe considerar el patrón de diseño que eligió. Esto ayudará con la incorporación, la búsqueda de código y el aislamiento de problemas más rápidamente. Personalmente, prefiero usar un patrón MVC al diseñar una aplicación Node.js. Me ayuda a desarrollarme más rápido, brinda flexibilidad para crear múltiples vistas para los mismos datos y permite la comunicación asincrónica y el aislamiento entre los componentes MVC, por nombrar algunos.

Me gusta seguir la estructura de directorios que se muestra arriba, que se basa en una combinación de Ruby on Rails y Express.js.

Vídeo relacionado: consejos y trucos de Node.js

En este video explicativo, aprenda varias técnicas que pueden mejorar su experiencia de desarrollo de Node.

2. Asignación de diagramas ER a modelos

Como se define en Techopedia, "Un diagrama entidad-relación (ERD) es una técnica de modelado de datos que ilustra gráficamente las entidades de un sistema de información y las relaciones entre esas entidades". Un diagrama ER describe las diversas entidades que participarán en nuestro sistema y define todas las interacciones entre ellas de manera que:

  • Todo lo que sea una "cosa" abstracta o física se convierte en una entidad en un modelo
  • Un modelo se asigna a una tabla dentro de nuestra base de datos
  • Un atributo o propiedad de una entidad se traduce en un atributo de un modelo, que a su vez es una columna dentro de una tabla.

Por ejemplo, si su entidad es un usuario, entonces el modelo correspondiente sería un "Usuario" con atributos como nombre, apellido y dirección dentro de la base de datos, así como una tabla y columnas correspondientes.

El uso de una arquitectura de datos simple hace que sea bastante sencillo rastrear su base de datos y el crecimiento de archivos cada vez que se crea un nuevo esquema.

3. Usando el patrón MVP

Implementar MVC no significa simplemente crear carpetas para controladores, vistas y modelos. También necesita dividir su código y lógica de acuerdo con MVC. El código dentro de sus modelos debe limitarse estrictamente a las definiciones del esquema de la base de datos. Los desarrolladores generalmente olvidan que los modelos también tendrán código que realizará operaciones CRUD. Además, cualquier función u operación que sea específica de ese modelo debe estar presente dentro de este archivo. La mayor parte de la lógica empresarial relacionada con un modelo debe estar en este archivo.

Un error común es descargar toda la lógica empresarial en los controladores. Los controladores solo deben invocar funciones de modelos u otros componentes, transferir datos entre componentes y controlar el flujo de la solicitud, mientras que la carpeta de vista solo debe tener código para convertir objetos en un formato legible por humanos. No se debe realizar ninguna lógica como formatear datos, ordenar o filtrar dentro de la vista. Mantener las vistas limpias no solo proporcionará una mejor experiencia de usuario, sino que también lo ayudará a cambiar las vistas sin alterar ningún otro componente.

4. División de la lógica en módulos

Como desarrolladores, siempre se nos dice que debemos organizar el código en archivos y módulos. Esto no significa que debamos intentar encajar toda la aplicación en un solo archivo. Dividir su código en función de la lógica y la funcionalidad es el mejor enfoque. Agrupar funciones relacionadas con una sola entidad u objeto en un solo archivo y organizar la estructura de directorios según la lógica tiene muchas ventajas. En primer lugar, ahorrará mucho tiempo al determinar qué función tocar cuando haya que solucionar un error. En segundo lugar, ayuda a desacoplar todos los componentes de la arquitectura, lo que facilita el reemplazo de la funcionalidad discreta sin la necesidad de modificar otras líneas de código. En tercer lugar, también ayudará a redactar casos de prueba.

5. La importancia de los casos de prueba

Es muy importante no tomar atajos al crear casos de prueba; las pruebas son las guardianas de su base de código. A medida que su aplicación crece, se vuelve más difícil recordar todos los escenarios que debe cubrir mientras está codificando. Los casos de prueba le ayudan a mantener estable la base de su código. Las pruebas previenen la regresión, lo que ahorra un valioso tiempo y esfuerzo de desarrollo. Le ayuda a garantizar que las nuevas funciones se distribuyan sin errores. También ayuda a mejorar la calidad del código al detectar errores antes de que pasen a producción. Y lo más importante, las pruebas ayudan a infundir confianza en que el código no fallará.

6. La importancia de los registros

Los registros son útiles para depurar y comprender el estado de su aplicación. Proporcionan información valiosa sobre el comportamiento de la aplicación. Aquí hay una lista rápida de cosas que debe tener en cuenta al aprovechar los registros:

  • Encuentre el equilibrio adecuado cuando se trata de talar. Tener "demasiada información" nunca es malo, pero el registro excesivo solo hará que su trabajo sea más difícil. Las agujas son más fáciles de encontrar en pajares más pequeños. Por otro lado, el registro insuficiente dará como resultado muy poca información disponible para depurar o diagnosticar.
  • Divida sus registros en línea y fuera de línea, donde los registros más recientes se guardan para una rápida recuperación y procesamiento, mientras que los registros más antiguos se archivan o se descargan en archivos.
  • Considere la frecuencia y la duración de sus registros, ya que afectará la cantidad de almacenamiento que necesitará. La mayoría de las veces, la cantidad de almacenamiento que necesita y la cantidad de registros que tiene son directamente proporcionales.

Y recuerde, no registre datos confidenciales como ID de correo electrónico, contraseñas, información de tarjetas de crédito y números de teléfono. No solo es un gran riesgo de seguridad, sino que a menudo es ilegal.

7. ¿Se ampliará la aplicación?

El peor enfoque para el desarrollo de aplicaciones es pensar en cómo escalar después de ganar tráfico. En su lugar, debe construir una arquitectura que tenga la capacidad de crecer desde el principio para ahorrar tiempo y aumentar la productividad.

Hacer girar los servidores no es escalar; distribuir la carga entre los recursos es. Esto no significa que no deba generar nuevos servidores cuando aumenta la carga. Primero, debe configurar el equilibrio de carga dentro de sus recursos actuales para manejar el aumento de carga. Cuando el equilibrio de carga no puede administrar la carga de trabajo de manera eficiente, es hora de comenzar el escalado horizontal y generar nuevos servidores. Puede lograr esto a través de un proceso sin estado independiente o mediante módulos. Cada proceso o módulo funcionará de forma aislada e independiente. Esto no solo ayudará a que su aplicación escale de manera eficiente, sino que también hará que su sistema sea tolerante a fallas y fácil de recuperar.

La forma de estructurar una aplicación web es tan importante como seleccionar la tecnología adecuada. Si los cimientos son defectuosos, la aplicación eventualmente fallará, se negará a escalar o, en algunos casos, no se iniciará. Nunca se apresure a desarrollar nuevas funciones o nuevas ideas sin una planificación y arquitectura adecuadas. Una mala estructura o arquitectura es como una bomba de tiempo esperando a explotar.

New Tech Forum proporciona un lugar para explorar y discutir la tecnología empresarial emergente con una profundidad y amplitud sin precedentes. La selección es subjetiva, basada en nuestra selección de las tecnologías que creemos que son importantes y de mayor interés para los lectores. no acepta material de marketing para su publicación y se reserva el derecho de editar todo el contenido contribuido. Envíe todas sus consultas a [email protected]