10 razones para usar los patrones CQRS y Mediator

martes, 2 de abril de 2024 Sin comentarios

La combinación de Clean Architecture con los patrones CQRS (Command Query Responsibility Segregation) y Mediator proporciona un enfoque poderoso para el diseño de software. En esta sinergia, la Clean Architecture establece una sólida estructura modular y una clara separación de responsabilidades, lo que facilita la comprensión y el mantenimiento del sistema a lo largo del tiempo.

El patrón CQRS divide las operaciones de lectura (queries) de las operaciones de escritura (commands), permitiendo optimizar cada una para su función específica y mejorar la escalabilidad y el rendimiento del sistema. Por otro lado, el patrón Mediator actúa como un intermediario entre los diferentes componentes del sistema, reduciendo las dependencias directas y promoviendo la comunicación a través de mensajes.

  1. El patrón CQRS (Command Query Responsibility Segregation) promueve la separación de las operaciones de lectura (queries) y escritura (commands), lo que facilita la gestión de la complejidad en el acceso a datos.
  2. Al separar las operaciones de lectura y escritura, se pueden optimizar las consultas de lectura para mejorar el rendimiento y la escalabilidad del sistema.
  3. El patrón Mediator actúa como un mediador entre los componentes del sistema, lo que facilita la comunicación entre ellos y reduce la dependencia directa.
  4. Utilizando Mediator en conjunto con CQRS se mejora la modularidad y la mantenibilidad del código, ya que se fomenta la implementación de pequeños componentes independientes.
  5. Al aplicar CQRS y Mediator en el acceso a datos, se puede implementar una arquitectura más flexible y adaptable a los cambios, debido a la separación de responsabilidades y la eliminación de acoplamientos fuertes.
  6. CQRS permite simplificar la lógica de negocios al separar claramente las operaciones de lectura y escritura, lo que facilita la implementación de reglas de negocio específicas en cada capa.
  7. Mediante la implementación de comandos y eventos en el patrón CQRS, se pueden gestionar de manera eficiente las operaciones transaccionales y garantizar la consistencia de los datos en todo momento.
  8. El uso de Mediator facilita la implementación de patrones de diseño como inyección de dependencias, lo que simplifica la configuración y la gestión de las dependencias entre componentes.
  9. CQRS y Mediator permiten mejorar la escalabilidad del sistema al distribuir la carga de trabajo de forma eficiente entre los diferentes componentes, mejorando así el rendimiento y la capacidad de respuesta.
  10. En resumen, la combinación de CQRS y Mediator en el acceso a datos proporciona una arquitectura robusta y flexible que facilita el desarrollo, la prueba y el mantenimiento de aplicaciones, permitiendo una mayor eficiencia y adaptabilidad a los cambios en los requisitos del negocio.

Autenticación / Autorización en API Restful con JWT

domingo, 10 de marzo de 2024 Sin comentarios

.net core jwt
.net jwt autenticación

La autenticación es un aspecto crucial de la seguridad de las aplicaciones web. Garantiza que los
usuarios sean quienes dicen ser antes de otorgarles acceso a recursos o funcionalidades específicas.
Un método popular de autenticación en el desarrollo web moderno son los JSON Web Tokens (JWT). En esta
entrada, exploraremos cómo implementar la autenticación de token JWT en la web api de localización de
establecimientos de farmacia.

En .net core  esta funcionalidad la conseguimos con el Nuget System.IdentityModel.Tokens.Jwt

Entonces al controlador o método que queramos añadir que sean solicitudes autenticadas añadimos la cabecera [Autorize] y creamos otro control en le que escribimos la lógica de autenticación:

[HttpPost]
public IActionResult Post([FromBody] LoginRequest loginRequest)
{
    //If login email and password are correct then proceed to generate token
    var email = loginRequest.Email;
    var password = loginRequest.Password;
    if (email == "email" && password == "password")
    {
        var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
        var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

        var Sectoken = new JwtSecurityToken(_config["Jwt:Issuer"],
          _config["Jwt:Issuer"],
          null,
          expires: DateTime.Now.AddMinutes(120),
          signingCredentials: credentials);

        var token = new JwtSecurityTokenHandler().WriteToken(Sectoken);

        return Ok(token);
    }
    return Unauthorized();
}

Así con JWT es un medio compacto y seguro para URL para representar identificaciones que se transferirán entre dos partes.
Estos identificadores se pueden firmar digitalmente, lo que los convierte en una forma segura de autenticar y transmitir información entre el cliente y el servidor. Los tokens JWT se utilizan a menudo para:
Autenticación sin estado, autenticación entre orígenes distintos, escalabilidad.

En resumen, podemos decir que, la identificación en APIs RESTful es esencial para garantizar la seguridad. JSON Web Tokens (JWT) se ha convertido en una elección popular para este propósito. Al implementar JWT, la información de identificación del usuario se codifica en un token firmado digitalmente, que luego se envía con cada solicitud. Esto permite a los servidores verificar la autenticidad y autorización de cada solicitud de manera eficiente. Los JWT contienen información como el ID del usuario y roles, facilitando la validación en el servidor sin necesidad de consultar la base de datos en cada solicitud. Además, la expiración del token proporciona una capa adicional de seguridad. En resumen, JWT simplifica la gestión de identidades en APIs RESTful, mejorando la eficiencia y seguridad del sistema.

Programación en tiempo real y protocolos TCP / IP

jueves, 15 de febrero de 2024 Sin comentarios
Vs 2022 TCPServer / TCPClient

La programación en tiempo real con .net 8 / C# y protocolos TCP/IP permite desarrollar aplicaciones que requieren respuestas inmediatas y precisas en entornos críticos. Al utilizar C# para implementar el código, se aprovechan las características de este lenguaje orientado a objetos, como la facilidad de mantenimiento y la gestión automática de la memoria.

En este contexto, el protocolo TCP/IP se convierte en el puente de comunicación, garantizando la fiabilidad y la entrega ordenada de datos entre dispositivos. En el código C#, la clase TcpClient y TcpListener facilitan la implementación de conexiones TCP, mientras que la gestión de hilos permite manejar las operaciones en tiempo real de manera eficiente.

Este el el código de ejemplo creado en dos proyectos de consola. Tenemos el proyecto TCPServer, que a partir de un IPEndPoint crea un TCPListener  al que los TCPClient en otro proyecto de consola llaman.

Es crucial establecer una comunicación eficiente entre los nodos para garantizar la sincronización precisa. Utilizando el espacio de nombres System.Net.Sockets, se pueden implementar mecanismos de lectura y escritura asíncronos para optimizar el rendimiento y mantener la capacidad de respuesta en tiempo real.

En resumen, la combinación de C# .net y protocolos TCP/IP ofrece un entorno propicio para el desarrollo de aplicaciones en tiempo real, proporcionando una base sólida para sistemas que requieren alta velocidad y precisión en la transmisión de datos.

Categories: General Tags: , ,

Desentrañando el Poder de CI/CD en Desarrollo de Software

martes, 2 de enero de 2024 Sin comentarios
ci / cd

La Integración Continua (CI) y la Entrega Continua (CD) han revolucionado la forma en que se desarrolla y entrega el software.
En el corazón de estas prácticas se encuentra la idea de automatización y eficiencia, allanando el camino para ciclos de desarrollo más
rápidos y lanzamientos más confiables, en ingeniería de software.

La CI implica la fusión constante de código, permitiendo que pequeñas contribuciones sean integradas y probadas automáticamente.
Herramientas como Jenkins y Travis CI han demostrado ser esenciales en este proceso, garantizando que cada cambio se ajuste sin problemas al código existente.

La CD, por otro lado, amplía la CI al automatizar la entrega del software en entornos de prueba o producción.
GitLab CI y Jenkins, por ejemplo, facilitan la implementación continua, permitiendo que el software sea entregado sin problemas una vez que ha pasado por las pruebas necesarias.

Estas prácticas han alcanzado su máximo potencial con el auge de las tecnologías de contenedores, donde Docker y Kubernetes han emergido como los pioneros. La orquestación eficiente de contenedores permite una entrega más rápida y escalabilidad.

En resumen, CI/CD ha dejado de ser una opción y se ha convertido en una necesidad para equipos de desarrollo ágiles y modernos. Con un flujo de trabajo CI/CD bien implementado, el desarrollo de software se vuelve más colaborativo, rápido y fiable, proporcionando a las empresas la capacidad de adaptarse rápidamente a las cambiantes demandas del mercado.

Arquitectura microservicios y .Net core

martes, 3 de enero de 2023 Sin comentarios
arquitectura microservicios
Arquitectura Microservicios

La arquitectura de microservicios es un enfoque para desarrollar aplicaciones software en el que se divide una aplicación en pequeños servicios autónomos que se comunican entre sí a través de una interfaz estándar, como HTTP.

Cada microservicio se encarga de una tarea específica y puede ser desarrollado, implementado y escalado de manera independiente. Esto permite un mayor grado de flexibilidad y facilita el mantenimiento y la actualización de la aplicación.

Una de las ventajas de la arquitectura de microservicios es que permite a los equipos de desarrollo trabajar de manera más ágil y eficiente, ya que cada microservicio puede ser desarrollado y probado de manera aislada antes de ser integrado en la aplicación completa.

Otra ventaja es que, al estar cada microservicio diseñado para realizar una tarea específica, es más fácil identificar y solucionar problemas en caso de que surjan. Además, si un microservicio falla, solo afectará a una parte de la aplicación, en lugar de a la aplicación completa.

Si nos referimos al entorno .Net Core podemos aprovechar los tipos de proyecto minimal web api y web api como base para microservicios. Usar patrones como idempotent y cqrs. También crear microservicios resilientes con la librería Polly.

Sin embargo, también hay desafíos en la implementación de una arquitectura de microservicios. Por ejemplo, puede ser más complicado hacer seguimiento y monitorear el rendimiento de una aplicación compuesta por muchos microservicios diferentes. Además, puede ser más difícil garantizar la consistencia de la aplicación cuando está dividida en muchos componentes independientes.

En general, la arquitectura de microservicios es una opción interesante para aplicaciones de gran escala y complejidad, especialmente cuando se requiere un alto grado de flexibilidad y escalabilidad. Sin embargo, es importante evaluar cuidadosamente si esta arquitectura es adecuada para el proyecto en cuestión y estar consciente de los desafíos y requisitos adicionales que conlleva su implementación.