Skip to content

Conversation

@FedericoLongo1
Copy link

a. Cambios realizados

Refactor de entidades

  • Encapsulamiento de atributos de la clase Clima en objetos de valor:
    • Temperatura: Representa la temperatura en ºC y calcula en ºF y ºK.
    • Ubicacion: Compuesta por Ciudad, Region y Pais, siendo cada uno de ellos una entidad del dominio.
  • Se refactorizó la clase Email para que no tenga lógica de envío de mails.

Refactor de lógica de servicios

  • Se eliminó la lógica del envío en AlertasService
  • Se creó el servicio EmailSenderService, responsable exclusivamente de enviar correos electrónicos.
  • Se resolvió una posible condición de carrera entre la generación de correos en AlertasService y su envío:
    • Los correos generados se guardan como pendientes (enviado = false) en vez de enviarlos en generarYEnviarEmail .
    • El envío real se realiza luego de forma asincrónica mediante procesarPendientes.

b. Justificación de decisiones de diseño

Principio de Responsabilidad Única (SRP)

  • Email solo representa un mensaje y su estado.
  • AlertasService detectar condiciones climáticas extremas y genera los correos con estas.

Escribiendo esto me di cuenta que podría tener un builder para los correos

  • EmailSenderService encapsula la lógica de envío.
  • EmailService persiste el estado del correo.

Bajo acoplamiento / Alta cohesión

  • Cada clase tiene una única responsabilidad bien definida.
  • La lógica de generación, envío y persistencia están desacopladas.

Eliminación de duplicación de responsabilidades

  • El envío y guardado de correos se realiza exclusivamente en procesarPendientes.

Mejora de la mantenibilidad y testabilidad

  • Las clases y métodos resultantes son más simples, reutilizables y testeables.
  • Es posible simular fallos en el envío sin afectar la generación de correos ni su almacenamiento.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant