È buona norma chiamare una funzione Controller da un altro Controller?

20

Sto avendo un caso in cui sto gestendo la logica di una ricerca in un controller e sto generando alcuni dati in base alle ricerche e restituendo come statistiche.

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

    
posta IAmJulianAcosta 03.12.2014 - 01:23
fonte

1 risposta

21

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

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

  • I controllori in genere restituiscono un risultato di un tipo destinato a essere utilizzato dal framework MVC. Questo risultato contiene molte informazioni che tu, come chiamante, non hanno bisogno (come il nome della vista), e non sempre rende facile ottenere le informazioni che potrebbero essere interessate (nel tuo caso modello, se immagino giusto).

  • I controllori non sono facili da inizializzare dal codice aziendale, poiché spesso necessitano di una certa quantità di informazioni sulla richiesta HTTP e sul contesto. Si prevede che tutte queste informazioni siano passate dal framework MVC.

Ancora più importante, se hai bisogno di una serie 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 proposito, in primo luogo, in primo luogo, e mantieni i controller il più piccoli possibile.

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

  • Ottieni l'input pertinente dalla richiesta,
  • Delega ai validatori il compito di validare / disinfettare l'input,
  • Chiama i metodi pertinenti del livello aziendale,
  • Dai al framework MVC il modello risultante e la vista.

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

Una volta che il codice è stato spostato sul livello aziendale, puoi fornire un'interfaccia di ricerca che può essere riusabile in modo chiaro e diretto, a differenza di un controller utilizzato da un altro.

    
risposta data 03.12.2014 - 03:25
fonte

Leggi altre domande sui tag