Dove inserire il codice "orchestrazione"

3

Ho un'applicazione web che implementa il pattern MVC in cui ho le classi controller i cui metodi mappano ciascuna su una richiesta HTTP.

Ho anche un livello di servizio con un gruppo di classi di servizio, con ogni classe di servizio che in genere contiene operazioni specifiche per una particolare entità di dominio.

Per logica semplice (come CRUD), un metodo di controller solitamente utilizza al massimo una classe di servizio e di solito solo un metodo su quella classe di servizio.

La mia domanda è come gestire la logica che coinvolge due (o più) entità.

Le opzioni che vedo sono:

  1. Consenti a una delle classi di servizio esistenti di gestire l'intera logica.
  2. Crea una nuova classe di servizio dedicata alla gestione della logica come questa.
  3. Utilizzano ancora le classi di servizio esistenti ma inseriscono la logica di orchestrazione nel controller. Il controller delega ancora la "carne" della logica per separare i servizi, ma si prenderà cura di cose come il sequenziamento e decidere in quale punto (s) per commettere modifiche.

Attualmente preferisco l'opzione 3 ma vorrei sapere se esiste un modo migliore. Sentiti libero di aggiungere qualsiasi opzione che non ho ancora elencato.

    
posta OJ Raqueño 07.10.2016 - 09:11
fonte

2 risposte

3

Un'importante linea guida nel decidere dove posizionare il codice è mantenere tutto il codice in una singola classe allo stesso livello di astrazione . Nel tuo caso, in una tipica applicazione MVC il controller opera a un livello di astrazione in cui effettua connessioni tra componenti e trasferisce i dati tra di loro. Se una classe di servizio esistente ha un livello di astrazione simile, potrebbe essere una buona idea, ma secondo la tua descrizione ("orchestrazione" suona come se gestisse i servizi esistenti piuttosto che fare cose simili a quello che stanno già facendo) non funziona 't. Quindi suggerirei di creare una nuova classe per questo.

    
risposta data 07.10.2016 - 11:08
fonte
2

Non ti consiglierei di mettere la logica di orchestrazione in un controller,
La ragione è che il controller dovrebbe semplicemente delegare le chiamate a un servizio e inviare la vista appropriata per essere renderizzata.
Anche quando si ha la logica in un servizio, si potrebbero avere anche altri controllori che usano quel servizio e quindi guadagni riusabilità.
Tuttavia è difficile dire se hai bisogno di un servizio separato solo per l'orchestrazione senza guardare il codice.
Nella maggior parte dei casi, un singolo servizio dovrebbe utilizzare / orchestrare con più altri servizi per soddisfare una richiesta.

    
risposta data 07.10.2016 - 09:37
fonte

Leggi altre domande sui tag