È buona norma chiamare una funzione del controller da un altro controller?


23

Sto riscontrando un caso in cui sto gestendo la logica di una ricerca in un controller e sto generando alcuni dati basati su ricerche e ritornando come statistiche.

È buona norma chiamare una funzione controller da un altro controller? O due controller non dovrebbero mai "parlare"?

Risposte:


24

Questo è piuttosto strano, sebbene la risposta dipenda dal linguaggio / framework che usi, poiché linguaggi / framework diversi hanno approcci diversi di MVC.

In generale, non utilizzerai un controller da un altro poiché:

  • I controller di solito restituiscono un risultato di un tipo destinato a essere utilizzato dal framework MVC. Questo risultato contiene molte informazioni che, come chiamante, non sono necessarie (come il nome della vista) e non sempre è facile ottenere le informazioni che potrebbero interessarti (nel tuo caso il modello, se immagino giusto).

  • I controller non sono facili da inizializzare dal codice aziendale, poiché spesso necessitano di una quantità di informazioni sulla richiesta HTTP e sul contesto. Tutte queste informazioni dovrebbero essere passate dal framework MVC.

Ancora più importante, se hai bisogno di un sacco di risultati di ricerca in due controller: uno che mostra i risultati all'utente finale, un altro che genera statistiche, inserisci semplicemente la logica di ricerca nel tuo livello aziendale (a cui appartiene in primo luogo, a proposito) e mantieni i tuoi controller il più piccolo possibile.

Il ruolo di un controller, in MVC, è quello di orchestrare il processo:

  • Ottieni l'input pertinente dalla richiesta,
  • Delegare ai validatori il compito di convalidare / disinfettare l'input,
  • Chiama i metodi pertinenti del livello aziendale,
  • Fornire al framework MVC il modello e la vista risultanti.

Il ruolo di un controller non è quello di gestire la logica aziendale.

Una volta spostato il codice nel livello aziendale, è quindi possibile fornire un'interfaccia di ricerca che può essere riutilizzabile in modo chiaro e semplice, a differenza di un controller utilizzato da un altro.


Ciao, grazie per la tua risposta. Supponendo che ho spostato la logica di ricerca nel livello aziendale, dove si trova il posto migliore in cui collocare l'interfaccia di ricerca? Sto usando Laravel.
IAmJulianAcosta

Sfortunatamente, non ho mai usato Laravel. Inoltre, immagino che la risposta dipenderà più dall'architettura della tua applicazione, piuttosto che dal framework.
Arseni Mourzenko,

Supponendo che tu sia nella cartella http esattamente di un livello con il tuo progetto di root. Puoi creare una cartella denominata contratto qui e tutti i tuoi file che fungono da interfaccia che puoi posizionare qui
Faris Rayhan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.