Mejoras en entidades - K3152 - Novacovich, Daniel Ivan #5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Análisis de la capa de entidades de dominio actual:
Clima:
Problemas detectados
Lo mismo para Ubicacion.
Sobre atributos como pais o ciudad:
Actualmente modelados como String, lo cual puede generar inconsistencias. Deberían validarse o representarse con un objeto de valor o enumeración.
Se propone: Encapsular atributos en Ubicación, Temperatura y Viento.
De esta forma mejoramos:
- Mantenibilidad y desacoplamiento: Si tenemos que modificar algo de la Temperatura solo modificamos la clase Temperatura
- Extensibilidad: la clase Temperatura tiene Celsius y Kelvin. Seria sencillo agregar un atributo o método para tener la temperatura en Kelvin.
Email
Problemas detectados:
Violación de SRP: La clase Email tiene múltiples responsabilidades:
Falta de extensibilidad: Está acoplada al canal "email". Si se agregara WhatsApp, habría que modificar la lógica existente.
Estado enviado como booleano: No es expresivo ni suficiente. ¿Qué pasa si hubo un error en el envío?
Propuesta:
Rediseño de la capa de dominio
Antes:

Después:

Actualización la capa de servicios en función del nuevo diseño:
Se pueden hacer muchas mejoras en la capa de servicios:
ClimaService:
Propuesta:
AlertaService:
Problemas detectados:
Propuesta:
Primero reduzcamos la responsabilidad: Creamos una abstracción IProcesadorDeAlertas que se va encargar de recibir Climas y generar alertas
La responsabilidad que le queda a AlertaService es:
Implementamos el ProcesadorDeAlertas: En este punto para desacomplarnos del "Mail" vamos a crear una abstracción llamada "ICanalAlerta".
De ICanalAlerta esperamos que sepa evaluar un clima para saber si requiere alerta, y el guardado de la alerta para ser enviada.
Ahora ProcesadorDeAlertas va a tener unas Lista de Canales de Alerta. La cual vamos a recorrer justo a los climas para alertar cuando sea necesario.
La cuál implementar evaluar cliema y guardarParaEnviar:
A Destacar:
Podriamos crear AlertaWhatsapp, y hacer toda su implementación necesaria (Services, clients, etc) y para el Procesador es transparente.
Y no tendríamos que modificar ningun archivo relacionado directamente con el ProcesadorDeAlertas.
Resultado de Refactor: