Mejoras en entidades - K3052/3152 - Juarez Gabriel #13
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.
Creo mediante un patron adapter, el adapter para email sender, donde gracias a este puedo tener distintas formas de enviar emails. Dejo planteado una forma “A”, donde si quisiera sumar una nueva forma de envio de emails a mi sistema solo bastaría con crear una clase “EmailSenderN” donde implementaría la misma, permitiéndome asi cumplir con el atributo de mantenibilidad.
Creo métodos para la clase “Clima” que me permitan tanto actualizar datos como setear y obtener las temperaturas en farenheit y Celsius, ya que al modificar alguna se debe modificar la otra para evitar inconsistencias.
Modifico emailService, donde incluyo el adapterSender para los email
ClimaService hace muchas cosas, por lo tanto intentando cumplir con los principios SOLID divido las responsabilidades donde ClimaService solo coordina, creo un ClimaProvider que se encarga de llamar a la API, este se implementa mediante una interfaz IClimaProvider por si el dia de mañana se quiere obtener el clima de otra forma. Tambien creo un mapper para convertir el wheaterResponse a Clima.
Luego de estos cambios ahora es mas fácil testear (ejemplo ClimaService mockeando un ClimaProvider), ClimaService depende de interfaces (ClimaProvider) y no de atributos particulares, cumpliento con el principio open close se pueden agregar distintos ClimaProvider sin tocar ClimaService, cumpliendo con el principio SRP cada clase tiene una única responsabilidad (consultar la API, mapear o coordinar)