mvrcoag@gmail.com

Clegen, mi primera librería open source 🧩 - 28/03/2024

Genera módulos con clean architecture en proyectos de Typescript

El problema

Hace un par de meses comencé a interesarme e investigar acerca de patrones y arquitecturas de software, especialmente en el patrón repository y la arquitectura hexagonal.

Dentro de todo lo que aprendí (y sigo aprendiendo), noté que la generación de nuevos módulos tenía algo en común: compartían la misma estructura de carpetas.

Pongamos de ejemplo dos módulos: User y Product

.
├── ...
├── User
   ├── application
                └── UserService.ts # Casos de uso, servicios
   ├── domain
           ├── User.ts # Entidad de dominio
           └── UserRepository.ts # Interfaz
   └── infrastructure
                    └── Postgres
                               └── PostgresUserRepository.ts # Implementación de interfaz
.
├── ...
├── Product
   ├── application
                └── ProductService.ts # Casos de uso, servicios
   ├── domain
           ├── Product.ts # Entidad de dominio
           └── ProductRepository.ts # Interfaz
   └── infrastructure
                    └── Postgres
                               └── PostgresProductRepository.ts # Implementación de interfaz

¿Qué tienen de diferente en su estructura? Como podemos ver, solo el nombre del modulo, que a su vez generará variaciones en los nombres de los archivos y nombres de clases, que finalmente generarán sus respectivas variaciones en los imports de dichas clases/funciones/interfaces.

¿Y si hubiera una forma de automatizar la generación de esta estructura de módulos con un simple comando, y que a su vez se ocupara de los imports de dichos archivos según corresponda?

Solución: Clegen

Clegen (clean generator) es una herramienta de línea de comandos diseñada para ayudar a los desarrolladores en la inicialización de módulos en proyectos de Typescript.

Para comenzar a usarla, basta con ejecutar:

npx clegen@latest

Esto ejecutará el generador de módulos, el cual hará una serie de simples preguntas al desarrollador, como el nombre del modulo, su ubicación y si se desea generar una implementación del repositorio:

Flujo de preguntas de clegen Flujo de preguntas de clegen

Finalmente, el resultado será una estructura de carpetas similar a:

Estructura de carpetas resultante Estructura de carpetas resultante

¡Y listo! Ya tendríamos nuestro nuevo modulo para comenzar a trabajar sobre él, agregando los casos de uso según los vayamos requiriendo, preocupandonos de qué construimos en lugar de cómo lo construimos

Futuro de la librería

Si bien actualmente la librería es simple dado su problema a solucionar, la idea es extender su funcionamiento a distintos tipos de arquitecturas. El objetivo de Clegen no es solo generar estructuras de carpetas, sino servir como punto de referencia para estandarización de proyectos, y que de esta forma resulte más fácil para los equipos de desarrollo seguir una misma línea de diseño de software, una misma línea de arquitectura.

¿Contribuciones? ¡Claro!

Las contribuciones a Clegen son bienvenidas, si tienes problemas haciendo uso de la librería o deseas agregar características que crees que pueden ayudar a la comunidad no dudes en abrir un issue o un nuevo pull request en nuestro repositorio de GitHub.