In primo luogo, è quasi sempre un errore discutere del posto della logica aziendale in termini di velocità del programma (almeno, quando i livelli del modello e del controller fanno parte dello stesso programma senza alcuna comunicazione di rete tra di loro). Se si verificano problemi di velocità, è possibile ottimizzarli sia nel livello del modello che nel livello del controller.
Molto più importante della velocità è in genere l'obiettivo di fornire al tuo programma una buona struttura, in cui si conosce la responsabilità di ciascun componente, in cui è possibile testare le cose da soli, evitando la ripetizione del codice quando si utilizza la stessa parte della logica aziendale è necessario due volte e così via.
Pertanto, la domanda per il posto migliore dovrebbe essere guidata dalla domanda "che tipo di logica aziendale?"
- la logica di business che controlla le interazioni degli utenti delle tue visualizzazioni appartiene tipicamente a un controller
- piccole parti della logica aziendale che si occupano principalmente di un oggetto business appartengono tipicamente a quell'oggetto e quindi sono posizionate nel modo migliore nel modello. Esempio: avere un oggetto "Persona" con attributi "FirstName" e "LastName", e devi ottenere il "nome completo" come concatenazione di FirstName e LastName, quindi una proprietà "FullName" di "Person" può essere una buona idea .
- per le parti più grandi della tua logica, indipendentemente dalle tue visualizzazioni, dovresti introdurre classi di controller separate.
Dove esattamente disegnare la linea dipende da te. C'è una discussione a lungo termine e aperta nella comunità su quanta logica dovrebbe essere nel modello e quanto nei controllori, vedi, ad esempio, qui: link