AGGIORNAMENTO:controller <-> Servizio componente interazione
Ho un'applicazione desktop, con i seguenti componenti interagenti:
- WinForms UI.
- servizi (in-process C# classe che contiene la logica di business in realtà fare roba).
- Controller (classe C# che coordina gli eventi generati dall'interfaccia utente e chiama i metodi di servizio).
Se un controllore chiede un servizio di fare qualcosa, ma che il servizio ha bisogno di qualcosa di più dal primo controller (cioè i dati che il controllore deve utilizzare un'interfaccia utente per ottenere da parte dell'utente), come si dovrebbe il servizio ottenere il controllore per farlo?
Sono comodo con il concetto che
- utente comunica con
- UI che comunica con
- controller che comunica con
- componente servizi (da non confondere con un servizio Web o un servizio out-of-process) che comunica con
- Dati/Reposi Tories che comm ...
e così via.
Tuttavia, per quanto riguarda il Controller che comunica con il Servizio, quale metodo è migliore per questo? Dovrebbe:
- I metodi di servizio sono abbastanza raffinati e generano eccezioni se qualcosa non va bene in modo che il controllore sappia se andare avanti o dire all'utente che qualcosa è andato storto? Oppure ...
- I metodi di servizio restituiscono oggetti che il controllore può ispezionare per decidere cosa fare dopo?
Mi piace la prima opzione, perché la seconda potrebbe significare esplosione di classe, in cui è necessaria una classe di stile ServiceResult
per ciascun metodo di servizio.
Chiedo perché ovviamente il componente Servizio non è in grado di dire all'interfaccia utente cosa fare, solo il controller può, ma il controller non sa cosa dire all'interfaccia utente senza ricevere feedback dal servizio.
Cosa ne pensi?
Il controller riceve il servizio tramite un contenitore IoC. Il trucco è che a volte i servizi non possono andare oltre perché ha bisogno di più informazioni, ma non può accedere all'interfaccia utente - ha bisogno del controller per farlo. Quindi, come dovrebbe il servizio informare il controller di cui ha bisogno per raccogliere più informazioni? –
Se si pensa che il servizio sia un componente completo e indipendente con una certa responsabilità (mi ricorda semplicemente CRC), può avere uno scenario principale (riuscito) e alcune eccezioni (scenari alternativi). In questo caso stai parlando delle eccezioni. Questa è un'opinione di alto livello. Ora per l'implementazione, mi piace usare le eccezioni è un modo elegante. Sono auto-esplicativi e molto ben gestiti se usati correttamente nelle applicazioni. Anche se cambi controller o altri client per i tuoi servizi, funzionerà comunque. Spero che questa sia la risposta alla tua domanda. –