Estructura SDK
El CodeDesignPlus es un monorepo construido con NX, una herramienta que permite optimizar y gestionar tareas comunes de desarrollo como compilación, pruebas, restauración de paquetes, análisis con SonarQube, y más. Esta arquitectura facilita el manejo de múltiples librerías bajo un único repositorio, promoviendo la consistencia y la eficiencia.
Organización del Monorepo
Section titled “Organización del Monorepo”Dentro del monorepo, encontrarás una carpeta principal llamada packages
que contiene subcarpetas. Cada subcarpeta representa una librería del SDK. Estas librerías están diseñadas siguiendo una estructura estándar que permite mantener la claridad y facilitar su uso.
Estructura Interna de una Librería
Section titled “Estructura Interna de una Librería”Cada librería en el SDK tiene la siguiente organización básica:
Directorypackages/CodeDesignPlus.Net.[LibraryName]
Directorysrc/
- CodeDesignPlus.Net.[LibraryName]
- CodeDesignPlus.Net.[LibraryName].Abstractions
Directorytests/
- CodeDesignPlus.Net.[LibraryName].Test
Detalles de cada carpeta
-
src
: Contiene dos proyectos principales:- Abstractions: Incluye clases, interfaces y contratos esenciales para la librería. Define el comportamiento esperado y proporciona una base para desacoplar dependencias.
- Implementaciones: Proporciona las implementaciones concretas basadas en las abstracciones.
-
tests
: Aloja las pruebas unitarias de la librería. Estas pruebas están diseñadas para verificar el comportamiento correcto de las abstracciones y sus implementaciones, asegurando la calidad del código.
Patrones de Diseño Recurrentes
Section titled “Patrones de Diseño Recurrentes”El SDK CodeDesignPlus.Net utiliza patrones de diseño esenciales que ayudan a estructurar el desarrollo de microservicios de forma modular y escalable. A continuación, se describen los patrones más relevantes presentes en el SDK, ofreciendo una base sólida para desarrolladores que buscan comprender e implementar estas prácticas.
Principios SOLID
Section titled “Principios SOLID”Los principios SOLID son un conjunto de reglas que ayudan a crear software más fácil de mantener y extender. Estos principios incluyen:
- S (Single Responsibility Principle): Cada clase debe tener una sola responsabilidad.
- O (Open/Closed Principle): Las entidades de software deben estar abiertas a la extensión, pero cerradas a la modificación.
- L (Liskov Substitution Principle): Los objetos de una clase derivada deben poder reemplazar a los objetos de su clase base sin alterar el comportamiento del programa.
- I (Interface Segregation Principle): Es mejor tener muchas interfaces específicas en lugar de una interfaz genérica y amplia.
- D (Dependency Inversion Principle): Los módulos de alto nivel no deben depender de módulos de bajo nivel; ambos deben depender de abstracciones.
Patrón de Opciones
Section titled “Patrón de Opciones”El patrón de opciones es una práctica común en aplicaciones .NET para gestionar configuraciones de forma fuertemente tipada. Este patrón permite mapear secciones específicas de archivos de configuración (como appsettings.json
) a clases .NET, facilitando el acceso a las opciones de configuración en el código. Las clases de opciones generalmente se registran como servicios en el contenedor de dependencias mediante IOptions<T>
, proporcionando un mecanismo limpio y organizado para acceder a configuraciones en toda la aplicación.
Patrón Factory
Section titled “Patrón Factory”El patrón Factory es una forma de crear objetos sin especificar las clases exactas que se van a instanciar. En lugar de instanciar directamente, el cliente utiliza un método de fábrica que encapsula la lógica de creación. Esto permite cambiar las implementaciones concretas sin modificar el código del cliente.
Patrón de Repositorio
Section titled “Patrón de Repositorio”El patrón de repositorio proporciona una abstracción para acceder a los datos almacenados en un backend, como una base de datos. Su objetivo es separar la lógica de negocio del acceso a datos, proporcionando una interfaz común para realizar operaciones como insertar, eliminar y consultar datos.
Patrón Unidad de Trabajo (Unit of Work)
Section titled “Patrón Unidad de Trabajo (Unit of Work)”Este patrón agrupa una serie de operaciones de datos en una sola transacción. Todas las operaciones realizadas dentro de una unidad de trabajo deben completarse con éxito; de lo contrario, se revierten todas para garantizar la consistencia de los datos.
Patrón de Extensiones
Section titled “Patrón de Extensiones”El patrón de extensiones permite añadir funcionalidades a clases existentes sin modificar su código original. Esto se logra mediante métodos de extensión, una característica en lenguajes como C#, que mejora la modularidad y la reutilización de código.
Librerías del SDK
Section titled “Librerías del SDK”El CodeDesignPlus está compuesto por un conjunto de librerías diseñadas para facilitar el desarrollo de aplicaciones modulares y escalables. Cada librería en el SDK sigue una estructura coherente y estandarizada, lo que permite a los desarrolladores integrar, extender y mantener fácilmente las funcionalidades del SDK en sus proyectos. Las librerías que componen el SDK están orientadas a resolver diversos problemas comunes en el desarrollo de software, asegurando calidad, rendimiento y facilidad de uso.
A continuación, se presenta un listado de las principales librerías del CodeDesignPlus. Cada librería está diseñada para ofrecer soluciones específicas, y puedes explorar más detalles sobre cada una a través del enlace proporcionado.
CodeDesignPlus.Net.Core
Section titled “CodeDesignPlus.Net.Core”Base común para las otras librerías del SDK, con utilidades de serialización y manejo de excepciones.
CodeDesignPlus.Net.Criteria
Section titled “CodeDesignPlus.Net.Criteria”Permite crear y aplicar criterios de búsqueda complejos en consultas de bases de datos.
CodeDesignPlus.Net.EFCore
Section titled “CodeDesignPlus.Net.EFCore”Integración con Entity Framework Core para trabajar con bases de datos relacionales.
CodeDesignPlus.Net.Event.Sourcing
Section titled “CodeDesignPlus.Net.Event.Sourcing”Solución para gestionar eventos de manera persistente con Event Sourcing.
CodeDesignPlus.Net.EventStore
Section titled “CodeDesignPlus.Net.EventStore”Implementación de un Event Store para almacenar eventos de manera confiable.
CodeDesignPlus.Net.EventStore.PubSub
Section titled “CodeDesignPlus.Net.EventStore.PubSub”Integración de Event Store con sistemas de publicación y suscripción.
CodeDesignPlus.Net.Exceptions
Section titled “CodeDesignPlus.Net.Exceptions”Herramientas para el manejo y gestión de excepciones en el SDK.
CodeDesignPlus.Net.Generator
Section titled “CodeDesignPlus.Net.Generator”Librería para la generación automática de códigos y configuraciones.
CodeDesignPlus.Net.Kafka
Section titled “CodeDesignPlus.Net.Kafka”Integración con Apache Kafka para la gestión de mensajes y eventos.
CodeDesignPlus.Net.Logger
Section titled “CodeDesignPlus.Net.Logger”Soluciones para el registro de logs en aplicaciones .NET.
CodeDesignPlus.Net.Microservice.Commons
Section titled “CodeDesignPlus.Net.Microservice.Commons”Conjunto de herramientas comunes para la arquitectura de microservicios.
CodeDesignPlus.Net.Mongo
Section titled “CodeDesignPlus.Net.Mongo”Integración con MongoDB para trabajar con bases de datos NoSQL.
CodeDesignPlus.Net.Observability
Section titled “CodeDesignPlus.Net.Observability”Soluciones para la supervisión y observabilidad de sistemas distribuidos.
CodeDesignPlus.Net.PubSub
Section titled “CodeDesignPlus.Net.PubSub”Implementación de patrones de publicación y suscripción para la comunicación entre servicios.
CodeDesignPlus.Net.RabbitMQ
Section titled “CodeDesignPlus.Net.RabbitMQ”Integración con RabbitMQ para la mensajería asíncrona.
CodeDesignPlus.Net.Redis
Section titled “CodeDesignPlus.Net.Redis”Soluciones para trabajar con Redis, incluyendo almacenamiento en caché y bases de datos en memoria.
CodeDesignPlus.Net.Redis.PubSub
Section titled “CodeDesignPlus.Net.Redis.PubSub”Integración de Redis con patrones de publicación y suscripción.
CodeDesignPlus.Net.Security
Section titled “CodeDesignPlus.Net.Security”Herramientas de seguridad, como cifrado y manejo de claves.
CodeDesignPlus.Net.Serializers
Section titled “CodeDesignPlus.Net.Serializers”Librería para la serialización y deserialización de datos en formatos como JSON.
CodeDesignPlus.Net.xUnit
Section titled “CodeDesignPlus.Net.xUnit”Integración con xUnit para realizar pruebas unitarias en aplicaciones .NET.
CodeDesignPlus.Net.xUnit.Microservice
Section titled “CodeDesignPlus.Net.xUnit.Microservice”Extensiones para realizar pruebas unitarias en arquitecturas de microservicios.