ACTUALIZADA:Controller <-> Servicio componente interacción
I tiene una aplicación de escritorio, con los siguientes componentes que interactúan:
- Winforms UI.
- Servicio (clase de C# en proceso que contiene lógica comercial para realmente hacer cosas).
- Controlador (clase C# que coordina eventos generados por la IU y llama a los métodos de servicio).
Si un controlador pide un servicio para hacer algo, pero que el servicio necesita algo más desde el primer controlador (es decir, datos que el controlador debe utilizar una interfaz de usuario para obtener del usuario), cómo debe el servicio de obtener la controlador para hacerlo?
estoy cómodo con el concepto de que
- usuario se comunica con
- interfaz de usuario que se comunica con
- controlador que se comunica con
- componente de servicio (que no debe confundirse con las un servicio web o servicio fuera de proceso) que se comunica con
- Data/Reposi tories que comm ...
y así sucesivamente.
Sin embargo, con respecto al controlador que se comunica con el servicio, ¿qué método es mejor para esto? ¿Debería:
- Los métodos de servicio pueden ser bastante precisos, y arrojar excepciones si algo no está bien para que el controlador sepa si seguir adelante o decirle al usuario que algo salió mal? O ...
- Los métodos de servicio devuelven objetos que el controlador puede inspeccionar para decidir qué hacer a continuación?
Me gusta la primera opción, porque la segunda podría significar explosión de clase, donde necesita una clase de estilo ServiceResult
para cada método de servicio.
Pregunto porque, por supuesto, el componente del Servicio no puede decirle a la UI qué hacer, solo el controlador puede, pero el controlador no sabe qué decirle a la IU sin obtener retroalimentación del Servicio.
¿Qué opinas?
El controlador recibe el servicio a través de un contenedor IoC. El truco es que a veces los servicios no pueden ir más allá porque necesitan más información, pero no pueden acceder a la interfaz de usuario, necesita el controlador para hacerlo. Entonces, ¿cómo debe el servicio informar al controlador que necesita reunir más información? –
Si considera el servicio como un componente completo e independiente con cierta responsabilidad (solo me recuerda al CRC), puede tener un escenario principal (exitoso) y algunas excepciones (escenarios alternativos). En este caso, estás hablando de las excepciones. Esta es una opinión de alto nivel. Ahora para la implementación, me gusta usar excepciones es una forma elegante. Se explican por sí mismos y se manejan muy bien cuando se usan correctamente en las aplicaciones. Incluso si cambia su controlador o tiene otros clientes para sus servicios, todavía funcionará. Espero que esta sea la respuesta a tu pregunta. –