Valore dell'iniezione di dipendenza in MVC con controller skinny

0

L'iniezione di dipendenza è spesso raccomandata nei progetti MVC perché è facile da implementare con il modello e aggiunge una miriade di potenziali benefici. Effettivamente, viene fornito in bundle con il progetto MVC predefinito in Visual Studio.

Se leggi su MVC, tuttavia, vedrai un sacco di persone che raccomandano l'uso di controller skinny. In altre parole, il controller fa poco più che un ponte tra il motore di visualizzazione e la logica di business. Tutto il lavoro di elaborazione è invece svolto dai modelli e dalle classi di supporto.

Ma se stai usando controller skinny, c'è bisogno di DI? Sicuramente in questo caso, la gestione di cose come un repository o un file helper dovrebbe essere fatta al di fuori del controller?

O per dirla in un altro modo, quello che sto chiedendo è che se hai dei controller skinny, non dovrebbe esserci la necessità che tali controller abbiano dipendenze esterne? Nessuna dipendenza, nessuna necessità di prenderli in giro per i test, quindi non c'è bisogno di DI. In effetti ho visto alcuni argomenti che non dovresti sottoporre a test unitario i controller skinny, perché non c'è quasi nessuna logica in essi.

C'è qualche valore nell'adottare entrambi gli approcci?

    
posta Matt Thrower 22.04.2016 - 11:48
fonte

3 risposte

3

Dependency injection is often recommended in MVC projects because it's easy to implement with the pattern and adds a host of potential benefits

Direi che l'iniezione di dipendenza è raccomandata generalmente nei progetti (non solo MVC) a causa dei vantaggi che comporta in termini di disaccoppiamento e testabilità. Non c'è nulla di specifico in un pattern MVC. Come tale, adotterei DI in generale.

Indeed I've seen some arguments that you shouldn't unit test skinny controllers at all, because there's almost no logic in them.

Non sarei d'accordo con questo. Non so cosa costituisca 'quasi nessuna logica' ma tu vuoi testare il tuo codice per determinare che fa quello che vuoi inizialmente, e che continua a fare ciò che vuoi di fronte ai successivi modifiche / aggiunte (per assicurarti di non introdurre regressioni)

    
risposta data 22.04.2016 - 12:18
fonte
1

Sì, c'è un valore perché ti permette di testare i tuoi controllori.

Il livello aziendale e il modello non dovrebbero sapere nulla di http, quindi il lavoro del controller sta traducendo il livello aziendale in un mondo Web.

Esempio:

  • L'eccezione Y è stata generata dovrebbe comportare lo stato http 4xx
  • La precondizione A non è stata soddisfatta. Reindirizza ad Abc

Quindi, anche se il controller è magro, ha ancora del lavoro da fare. Unit test che il lavoro diventa possibile usando DI.

    
risposta data 22.04.2016 - 11:55
fonte
1

Supponiamo per un attimo che sia perfettamente corretto saltare DI con i controller sknny. Ora, per quanto riguarda il resto della tua applicazione?

L'iniezione di dipendenza come tecnica si dimostra estremamente utile e preziosa. Come altri hanno notato, incoraggia un design più disaccoppiato che migliora la testabilità. Questi sono vantaggi estremamente preziosi!

MVC o nessun MVC, Iniezione delle dipendenze è una buona idea generalmente .

Quindi, anche se non si applica ai tuoi controller skinny, si applica quasi sicuramente al resto della tua applicazione.

    
risposta data 22.04.2016 - 12:32
fonte

Leggi altre domande sui tag