Skip to content

Generador para Microservicios

Este documento detalla el uso del generador codedesignplus:microservice, una herramienta para la creación y gestión de microservicios basados en el arquetipo CodeDesignPlus.Net.Microservice que implementa el SDK CodeDesignPlus.Net.SDK. Aprenderás a utilizar cada comando, los cuales están relacionados con los conceptos de DDD y patrones de diseño subyacentes.

Archetype

Arquitectura y Patrones Clave


Antes de sumergirnos en los comandos, es crucial entender los principios que guían este generador:

  • Domain-Driven Design (DDD): Enfatiza el modelado del software alrededor del dominio del negocio. Conceptos clave incluyen:
    • Entidades: Objetos con identidad única y ciclo de vida (ej. un Usuario).
    • Objetos de Valor: Objetos inmutables que describen aspectos del dominio (ej. un Email).
    • Agregados: Colecciones de entidades y objetos de valor que se tratan como una unidad.
    • Eventos de Dominio: Representan algo que sucedió en el dominio del negocio.
  • Command Query Responsibility Segregation (CQRS): Separa las operaciones de lectura (Queries) y escritura (Commands), lo que permite optimizar cada lado de forma independiente.
  • Arquitectura Orientada a Eventos (Event-Driven): Permite que los componentes del sistema se comuniquen mediante la emisión y suscripción a eventos, mejorando el desacoplamiento.
  • Ports & Adapters: Este patrón desacopla la lógica de la aplicación de los detalles de infraestructura (como bases de datos, APIs externas, etc.). Utiliza puertos (interfaces) y adaptadores para interactuar con el mundo exterior, permitiendo que la aplicación se adapte a diferentes tecnologías y entornos sin afectar su lógica central.

¿Qué es CodeDesignPlus.Net.Microservice?


El arquetipo CodeDesignPlus.Net.Microservice es un punto de partida para la construcción de microservicios .NET modernos. Promueve la separación de responsabilidades, la mantenibilidad y la escalabilidad. Incluye una estructura de proyecto bien definida, configuraciones predeterminadas y bibliotecas de utilidad, permitiendo a los desarrolladores centrarse en la lógica de negocio. Este arquetipo ofrece una base sólida que incorpora buenas prácticas y facilita el desarrollo rápido de microservicios robustos.

Archetype

Uso


Para utilizar el generador codedesignplus:microservice, sigue estos pasos:

  1. Instala Yeoman y el generador:

    Asegúrate de tener instalado Node.js y npm (Node Package Manager). Luego, instala Yeoman y el generador codedesignplus globalmente utilizando npm:

    Terminal window
    npm install -g yo
    npm install -g generator-codedesignplus
    • yo: Es el ejecutor de Yeoman, la herramienta que gestiona y ejecuta los generadores.
    • generator-codedesignplus: Es el generador específico que contiene los comandos para crear microservicios.
  2. Crea o accede a tu directorio de proyecto:

    Navega a la carpeta donde deseas crear tu microservicio o a la raíz de un proyecto existente en el que quieras agregar componentes:

    Terminal window
    cd path/to/your/project
  3. Ejecuta los comandos del generador:

    Dentro de tu directorio de proyecto, ejecuta el comando yo codedesignplus:microservice seguido del comando específico que deseas utilizar y sus opciones. Por ejemplo, para crear un nuevo microservicio:

    Terminal window
    yo codedesignplus:microservice microservice --organization "acme" --microservice "users" ... (otras opciones)

    Consulta la sección “Comandos del Generador” para conocer la sintaxis específica y las opciones disponibles para cada comando.

Consideraciones:

  • Asegúrate de tener Node.js y npm instalados correctamente en tu sistema.
  • Los comandos del generador se ejecutan en la línea de comandos o terminal.
  • Cada comando puede tener diferentes opciones que puedes consultar en esta documentación.

Comandos del Generador


A continuación, se detallan los comandos disponibles en el generador codedesignplus:microservice. Cada comando se presenta como un subtítulo con su descripción y ejemplo de uso.

1. Creación de Microservicio

Command: yo codedesignplus:microservice microservice

Este comando es el punto de partida para generar la estructura de un nuevo microservicio. Puedes optar por un microservicio CRUD o uno Custom, cada uno con sus propias características y patrones de diseño, para adaptarse mejor a las necesidades de tu proyecto.

Microservicio CRUD

Un microservicio CRUD (Create, Read, Update, Delete) se centra en la gestión de datos. Es adecuado para escenarios donde las operaciones principales son crear, leer, actualizar y eliminar entidades. Se enfoca principalmente en la persistencia de datos.

Terminal window
yo codedesignplus:microservice microservice \
--organization "acme" \
--microservice "users" \
--description "Microservicio para gestionar usuarios de la plataforma." \
--contact-name "Jane Doe" \
--contact-email "jane.doe@example.com" \
--vault "vault-acme" \
--is-crud \
--aggregate "user" \
--enable-grpc \
--enable-async-worker \
--consumer-name "userRegistered" \
--consumer-aggregate "user" \
--consumer-action "send-welcome-email"

Microservicio Custom

Un microservicio custom se enfoca en la lógica de negocio compleja y eventos, en lugar de simples operaciones CRUD. Es ideal para escenarios donde el flujo de trabajo es más importante que el almacenamiento de datos, permitiendo mayor flexibilidad y personalización.

Terminal window
yo codedesignplus:microservice microservice \
--organization "acme" \
--microservice inventory \
--description "Microservicio para gestionar el inventario de productos." \
--contact-name "John Smith" \
--contact-email "john.smith@example.com" \
--vault "vault-acme" \
--aggregate "product" \
--enable-grpc \
--enable-async-worker \
--consumer-name "orderCreated" \
--consumer-aggregate "order" \
--consumer-action "update-stock" \
--domain-events "ProductCreated,ProductUpdated,ProductRemoved" \
--entities "Product,Category" \
--commands CreateProduct,UpdateProduct,RemoveProduct \
--queries "FindProductById,FindProductsByCategory"

2. Creación de un Agregado

Command: yo codedesignplus:microservice aggregate

Crea un nuevo agregado en el microservicio. Los agregados son bloques de construcción clave en DDD, que garantizan la consistencia de las entidades dentro de sus límites.

Terminal window
yo codedesignplus:microservice aggregate \
--organization "acme" \
--microservice "users" \
--aggregate "user"Profile

3. Creación de Entidad

Command: yo codedesignplus:microservice entity

Crea una o más entidades. Las entidades son objetos con identidad que pueden cambiar de estado a lo largo de su ciclo de vida.

Terminal window
yo codedesignplus:microservice entity \
--organization "acme" \
--microservice "inventory" \
--entities "Product,Category"

4. Creación de Value Object

Command: yo codedesignplus:microservice valueObject

Crea uno o más objetos de valor. Estos son objetos inmutables definidos por sus atributos y no tienen identidad propia.

Terminal window
yo codedesignplus:microservice valueObject \
--organization "acme" \
--microservice "users" \
--valueObjects "Email,Address"

5. Creación de Evento de Dominio

Command: yo codedesignplus:microservice domainEvent

Crea uno o más eventos de dominio, que son representaciones de algo que ha ocurrido en el dominio.

Terminal window
yo codedesignplus:microservice domainEvent \
--organization "acme" \
--microservice "orders" \
--aggregate "Order" \
--domainEvents "OrderCreated,OrderShipped"

6. Creación de Repositorio

Command: yo codedesignplus:microservice repository

Crea un repositorio para un agregado específico, proporcionando una interfaz para acceder a los datos persistentes del agregado.

Terminal window
yo codedesignplus:microservice repository \
--organization "acme" \
--microservice "products" \
--repository "Product"

7. Creación de Controlador

Command: yo codedesignplus:microservice controller

Crea un controlador que gestiona las peticiones entrantes (HTTP o gRPC) para el microservicio.

Terminal window
yo codedesignplus:microservice controller \
--organization "acme" \
--microservice "users" \
--controller "UserProfileController"

8. Creación de Proto

Command: yo codedesignplus:microservice proto

Crea un archivo .proto para un servicio gRPC, que define los mensajes y servicios para la comunicación.

Terminal window
yo codedesignplus:microservice proto \
--organization "acme" \
--microservice "products" \
--proto-name "ProductService"

9. Creación de Consumer de Eventos

Command: yo codedesignplus:microservice consumer

Crea un consumer que reacciona a eventos publicados por otros microservicios, realizando una acción específica.

Terminal window
yo codedesignplus:microservice consumer \
--organization "acme" \
--microservice "notifications" \
--consumer-name "orderCreated" \
--consumer-aggregate "order" \
--consumer-action "send-order-confirmation"

10. Creación de Query

Command: yo codedesignplus:microservice query

Crea una o más queries para obtener información del sistema, sin modificar su estado.

Terminal window
yo codedesignplus:microservice query \
--organization "acme" \
--microservice "products" \
--aggregate "product" \
--repository "Product" \
--queries "FindProductById,FindProductsByName"

11. Creación de Comando

Command: yo codedesignplus:microservice command

Crea uno o más comandos para realizar acciones que cambian el estado del sistema.

Terminal window
yo codedesignplus:microservice command \
--organization "acme" \
--microservice "orders" \
--aggregate "Order" \
--repository "Order" \
--commands "CreateOrder,CancelOrder"

12. Creación de Data Transfer Objects

Command: yo codedesignplus:microservice dto

Crea uno o más Data Transfer Objects (DTOs) para transferir datos entre capas o microservicios, permitiendo definir la forma de los datos según las necesidades del consumidor.

Terminal window
yo codedesignplus:microservice dto \
--organization "acme" \
--microservice "orders" \
--aggregate "Order" \
--dataTransferObject "OrderDto,OrderSummaryDto"

13. Creación de un Proyecto gRPC

Command: yo codedesignplus:microservice grpc

Crea un proyecto gRPC que actúa como servidor. Este comando es muy util cuando el microservicio creado fue creado en su momento sin un proyecto gRPC.

Terminal window
yo codedesignplus:microservice grpc

14. Creación de un Proyecto AsyncWorker

Command: yo codedesignplus:microservice asyncWorker

Crea un proyecto AsyncWorker que actúa como un worker para procesar eventos de forma asíncrona.

Terminal window
yo codedesignplus:microservice asyncWorker