Implementacion de service #517
-
Buenas tardes! Como andan? Esta separación me resulta útil porque permite mantener una única responsabilidad por clase, aplicar validaciones antes de instanciar el objeto, y facilitar los tests. También pensé en complementar esto con un RepositorioDeUsuarios, como una interfaz que encapsule el acceso al almacenamiento de usuarios, lo cual ayudaría a desacoplar la lógica del dominio de la infraestructura. Es correcto o recomendable utilizar un service para manejar el registro de usuarios, y acompañarlo con un repositorio para la persistencia? O sería preferible abordar esta responsabilidad desde otro patrón o clase, para mantener un diseño más orientado a objetos? |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 2 replies
-
Buenas! Me está volviendo a surgir la misma duda que plantee hace un rato. En este caso, estoy trabajando con el requerimiento: La parte del registro ya la resolví, pero cuando fui a implementar la creación del canal, automáticamente pensé en crear un ServicioDeCanal que se encargue de validar si la persona ya tiene un canal, instanciar uno nuevo y guardarlo. Básicamente, un service que coordine la lógica. Sin embargo, entiendo que la creacion de services no siempre es lo más adecuado desde el diseño puramente orientado a objetos. Por eso estuve explorando una alternativa, que sería darle esa responsabilidad directamente al objeto PersonaRegistrada, haciendo algo como: public void crearCanal(String nombre) { Cuando aparece la necesidad de validaciones externas (por ejemplo: ya existe un canal para esta persona?, el nombre está en uso?, persistimos el canal?), siento que inevitablemente vuelvo a necesitar un service, porque esa lógica ya no pertenece al objeto en sí mismo. Entonces mi pregunta es: Me interesa poder entender mejor cuándo cada enfoque es más apropiado, ya que en la práctica me está costando evitar el uso de services sin romper otras buenas prácticas o dejar el modelo acoplado a cosas que no le corresponden. |
Beta Was this translation helpful? Give feedback.
-
Hola buenas noches! Leyendo lo que planteas, me parece que estás encarando la solución muy desde el lado de la persistencia y validación de datos. Si bien eso es importante, yo le pondría más foco a cómo se resuelven los requerimientos de negocio más que en cómo se hacen las validaciones de los usuarios. Y contestando a la pregunta, pensá que en esta parte del año lo que más nos importa son las cualidades de diseño, siempre apuntá a un diseño que refleje cohesividad, bajo acoplamiento, mantenibilidad y que cada clase encapsule responsabilidades concretas. |
Beta Was this translation helpful? Give feedback.
-
Hola Micaela! Entiendo lo que me comentás y coincido en la importancia. Justamente vengo intentando aplicar estas ideas que mencionas, pero me encuentro con dificultad cuando aparecen ciertas reglas que no están explícitas en la sección de requerimientos, pero que parecen necesarias para que el dominio tenga coherencia. "Una persona registrada no puede tener más de un canal". Ese tipo de reglas me llevan a pensar automáticamente en soluciones más técnicas, como crear un servicio para validar o coordinar esa lógica, o usar un repositorio para manejar la persistencia. Y ahí es donde me cuesta no desviarme de un diseño centrado en el modelo de dominio. Lo mismo me pasa en otros requerimientos propios del sistema como: "Como persona internauta, deseo poder listar canales" En este caso también me viene la idea de repositorios a la cabeza. Entonces, mi duda es: ¿En esta instancia del año, conviene dejar de lado las validaciones y temas de persistencia para enfocarme exclusivamente en el diseño del dominio? Entiendo que esto podría complicar la implementación de ciertos requerimientos, como el listado de canales, pero quisiera saber si es recomendable priorizar un diseño enfocado, justamente, en las cualidades de diseño. Muchas gracias! |
Beta Was this translation helpful? Give feedback.
Hola buenas noches! Leyendo lo que planteas, me parece que estás encarando la solución muy desde el lado de la persistencia y validación de datos. Si bien eso es importante, yo le pondría más foco a cómo se resuelven los requerimientos de negocio más que en cómo se hacen las validaciones de los usuarios. Y contestando a la pregunta, pensá que en esta parte del año lo que más nos importa son las cualidades de diseño, siempre apuntá a un diseño que refleje cohesividad, bajo acoplamiento, mantenibilidad y que cada clase encapsule responsabilidades concretas.