Skip to content

Conversation

@nachoberaza
Copy link

climalert

Cambios y justificaciones

Entidad Email

Actualmente esta clase mezcla la capa de dominio con la capa de logica de negocio. Esto se ve en el
metodo enviar(). Esto deberia ser responsabilidad de un servicio externo.
Ademas, esto ultimo viola el principio de Open/Closed (OCP) ya que ante cualquier modificacion en el
envio particular de emails, uno tendria que tocar la clase Email modificando su comportamiento y no
extendiendolo.

Se creo una interfaz IEmailSender que encapsule este comportamiento, ademas
se agrego una implementacion particular en la clase DefaultEmailSender y se agrego un atributo de este
tipo de interfaz en el servicio EmailService.

Dejo un ejemplo de como queda el Servicio principal con el nuevo emailSender como atributo de clase

public class EmailService implements IEmailService {
    private static final Logger logger = LoggerFactory.getLogger(EmailService.class);
    private final IEmailRepository emailRepository;
    private final IEmailSender emailSender;

    public EmailService(IEmailRepository emailRepository, IEmailSender emailSender) {
        this.emailRepository = emailRepository;
        this.emailSender = emailSender;
    }
    ...
}
  • Por otro lado, como sugerencia podria aplicarse un value object en el constructor de la clase.

Entidad Alert

Agrego la entidad de dominio "Alerta" o "Alert" en el que se vea representado el mensaje en si que emitira la app.
Ademas de esto, agrego el repositorio especifico para esta entidad (junto con una abstraccion IAlertRepository para
respetar el principio de inversion de dependencias).
Tambien se agrego el componente de "Alert condition" para que se pueda detectar cuando es necesario
disparar la alerta en base a las condiciones climaticas configuradas en dicho componente a modo de parametros.

@nachoberaza nachoberaza changed the title Feature/domain refactor Refactor - K3052 - Ignacio Martinez Beraza May 28, 2025
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