Las aplicaciones profesionales que se desarrollan con NestJS se realizan de forma modularizada para dividir el código fuente de forma lógica y que el proyecto sea más escalable y comprensible.
Cómo hacer la modularización de un proyecto en NestJS
Para modularizar una aplicación, el CLI de NestJS trae consigo la posibilidad de autogenerar módulos con el comando nest generate module <module-name> o en su forma corta nest g mo <module-name>.
Los módulos son simples clases que utilizan el decorador @Module() para importar todo lo que construyan al mismo.
import{Module}from'@nestjs/common';@Module({ imports:[],// Importación de otros módulos controllers:[],// Importación de controladores providers:[],// Importación de servicios})exportclassPruebaModule{}
De esta manera, un módulo agrupará un conjunto de controladores y servicios, además de importar otros módulos.
A partir de aquí, tu aplicación podría tener un módulo para usuarios, otro para productos, otro para comentarios, etc. Crea tantos módulos como tu aplicación necesite.
Ejemplo de modularización de una aplicación
En las siguientes imágenes te mostramos como debería quedar organizada la aplicación:
están mal las clases, ésta debería de ser la clase 2 y la 2 debería ser la 3, creería yo.
¡Hola, Gustavo!
En la clase anterior se hace un repaso de como quedó el código desarrollado en el primer curso de la saga: Curso de Backend con NestJS. Con esto el profesor ofrece un punto de partida común para quienes terminaron el curso e hicieron el reto por su cuenta.
A partir de esta clase comienza a desarrollar los temas de programación modular. ¿Qué cosa te ha confundido o ha sido difícil de entender?
La comunidad está para ayudarte 👋🏽
coincido con Gustavo, en la clase anterior repasan lo del curso anterior. Pero al a vez, presentan el proyecto mudlarizado como recién explican en está elección. Por tanto, para aprovechar mejor el contenido, esta clase debería estar antes que la anterior, para ya ver la anterior con el contexto y el conocimiento de porqué dividir la responsabilidad en módulos.
La aplicación debería quedar organizada así:
Para crear los módulos con sus respectivos controladores, servicios, dto y demás, puedes usar:
nest g resource ruta-del-módulo
Con el tiempo nos damos cuenta que hay bastantes acciones que se repiten en todas las apps, para ellos nest nos provee
nest g resource users que nos ayuda a generar un CRUD basico para cada modulo de la app 👍✨
Para crear controladores dentro de un modulo con el cli puedes usar esto:
nest g co controllers/users users
Pasando como proximo parametro el modulo donde quieres que se cree el controlador.
Hace tiempo un framework no me llamaba tanto la atención como NEST! Increíble la consistencia del código
Colombia S.O.S
al parecer las ramas están desordenadas, para hacer el paso a paso de este video tendrían que pararse en la rama master ya que las ramas step-1, step-2 etc están más adelantadas... para que lo tengan en cuenta!
No están desordenadas, pero si tienes razón en que la rama ya tiene el proceso terminado de la clase, así que si lo quieres junto a la clase te paras en la rama master y creas la rama step-1 y lo haces a la par del video luego puedes comprobar tu solución con el repositorio. 😀
Esta deberia ser la clase 2, no la 3. Aca esta explicando algo que se usa en la clase 2. Se debe arreglar esto.
Un modulo puede tener sub modulos? si si como se haría esto? con el cli?
Hola Nicolas, entiendo que las pruebas unitarias no se ven en este capítulo, pero ¿cuándo vemos esto con el contenido de este curso?, sería genial poder tener un curso por separado y que nos eduque a programar haciendo testing, ojalá con TDD.
Decorador @Module que tiene 4 atributos: imports, controllers, providers y exports (este ultimo para conectar con otro modulo)
nest g mo nombreDeTuModulo
Entiendo que al modularizar por "Dominios" podemos ir facilmente a una arquitectura con microservicios :D
muy intersante. no estoy seguro si se pueda pasar a microservicios, tienes aun la dependencia del modulo principal. y los microservicios en realidad se comunican entre si por un message broker. esto es mas para no tener una inyeccion de dependencias por toda la aplicacion si solo la necesitas en un modulo. por ejemplo users no necesita en realidad el service de products
Seria bueno crear una carpeta llamada "categories" dentro de products, y usar las mismas carpetas?
Que tan importantes son los archivos de testing para el desarrollo?, digo, por que nestjs los crea y en vez de ayudar, solo generan desorden. Hay forma de evitarlos?
Si no tienes pensado hacer testing puedes eliminarlos sin ningun problema, para evitarlos al momento de crear un service, controller, etc; puedes agregar --no-spec al comando de creacion
Como hago para crear un controlador u otro archivo dese la terminal sin el segundo archivo de testing?
Para evitarlos al momento de crear un service, controller, etc; puedes agregar --no-spec al comando de creacion
Excelente, muchas gracias
Para que es el campo de exports del module?
Esto de modular a nivel de dominio no sería mejor usar microservicios ?
No siempre es necesario. Cuando separas un monolito en microservicios, podria implicar que hay un equipo para atender a ese micro.
Las arquitecturas de microservicios pueden brindar un alto grado de flexibilidad en la elección de tecnología, el manejo de la solidez y la escalabilidad, la organización de equipos y más. Esta flexibilidad es en parte la razón por la que muchas personas están adoptando arquitecturas de microservicios. Pero los microservicios traen consigo un grado significativo de complejidad, y debe asegurarse de que esta complejidad esté garantizada. Sin embargo, son una elección arquitectónica cuyo uso debe estar justificado por los problemas que se intentan resolver.
¿Por que no se te ocurrió crea toda esa estructura modular de controles y servicios con comandos?
Mejor así:
nest g mo modules/products --flat
nest g mo modules/users --flat
Así todos los módulos quedan dentro de la carpeta modules.