Il Model-View-Controller (MVC) è un modello di progettazione architettonica che esiste, principalmente, per separare la logica di business dalla presentazione. Fondamentalmente, non vuoi che il tuo back-end tocchi il tuo fronte. Sembra in genere come questo:

I motivi per fare questo è perché, separando il back-end e la parte anteriore, non si leghi la tua interfaccia utente direttamente ai dati/lavoro. Ciò consente di inserire nuove interfacce nella logica aziendale senza influire su detta logica. Inoltre, migliora anche la facilità di test.
Un semplice esempio di dove MVC è utile - diciamo che hai un'applicazione che gestisce le finanze della tua azienda. Ora, se stai utilizzando correttamente MVC, puoi avere un front-end che si trova presso la scrivania di un finanziere e gli consente di gestire le transazioni, gestire le finanze, ecc. MA, perché la logica di business è separata, puoi anche fornire un front-end al tuo CEO Blackberry che gli permette di vedere lo stato attuale del business. Poiché i due front-end sono diversi, possono fare cose diverse pur fornendo (diversi tipi di) accesso ai dati.
EDIT:
Dal aggiornati tua domanda un po ', io aggiornare la mia risposta. Non esiste una scienza perfetta per la separazione di MVC. Ci sono alcune buone regole pratiche, tuttavia. Ad esempio, se si sta parlando di componenti della GUI, questa è probabilmente una vista. (Stai parlando di aspetto grafico, usabilità, ecc.) Se stai parlando di dati e del lato "business" della casa (database, logica, ecc.), Probabilmente stai facendo riferimento a un modello. E, tutto ciò che controlla l'interazione tra i due è molto probabilmente un controller.
Inoltre, è necessario notare che, mentre le viste e i modelli sono in genere separati "fisicamente", un controllore può esistere con una vista quando ha senso.
Si ha ragione quando si dice che il framework (o anche la lingua) per MVC non ha importanza. Il pattern stesso è indipendente dal linguaggio e descrive davvero un modo per architettare il tuo sistema.
Spero che questo aiuti!
Mi piace la frase "linguaggio agnostico". –
grazie, sarebbe possibile espandere la differenza tra il modello di visualizzazione e il controller? – MedicineMan