In che modo l'utilizzo di MVC nello sviluppo Web differisce sostanzialmente dall'utilizzo originale del pattern? [chiuso]

2

Recentemente ho letto una risposta riguardante MVC e lo sviluppo web , principalmente su come è stato originariamente progettato per i vecchi sistemi e da allora è stato applicato male nello sviluppo web. Detto questo, sono sicuro che lo schema ogni è stato ormai usato male nello sviluppo web. Ma vorrei ancora assicurarmi di non commettere gli stessi errori nell'applicare questo modello allo sviluppo web, portando me stesso e potenzialmente la mia squadra ad avere la stessa brutta esperienza con MVC.

We now deal with an obscene web-mvc hybrid that, with its awful buzzword status, ill definition, and having semi-illiterate-programmers as a target demographic, makes a really bad publicity to software patterns in general.

MVC, thus, became separation of concerns distilled for people who don't really want to think too much about it.

Come qualcuno che sta studiando su MVC e sta pensando di usarlo in un'applicazione web, mi piacerebbe sapere da una prospettiva obiettiva come il pattern MVC dovrebbe essere applicato allo sviluppo web.

Mi è venuto in mente che lo sviluppo web, con i metodi preesistenti per il rendering del contenuto tramite DOM e con JavaScript un linguaggio generico, MVC probabilmente si riferisce in modo molto diverso allo sviluppo web di quanto non faccia per i sistemi più vecchi utilizzati quando era prima reso popolare.

In sostanza, in che modo l'utilizzo dell'uso (corretto) del modello MVC nello sviluppo Web differisce dal suo utilizzo in un ambiente non Web, con lingue tipizzate rigorosamente e senza regole DOM e browser per il rendering e l'alterazione della GUI? In altre parole, è il fatto che stiamo ususando

  • JavaScript, una lingua vagamente battuta e molto diversa da quella usata quando è stato progettato il pattern MVC

  • e utilizzare DOM + CSS, un metodo semplificato di rendering del contenuto, mentre prima dello sviluppo web le applicazioni utilizzavano i propri motori di rendering o librerie di rendering per visualizzare il contenuto, rendendo forse più necessario il pattern MVC

cambia il modo in cui dovremmo definire e utilizzare il pattern MVC in un ambiente di sviluppo web? Esistono differenze fondamentali nell'uso originale di MVC in un ambiente non Web e l'utilizzo di MVC nello sviluppo Web?

    
posta Viziionary 21.10.2015 - 06:30
fonte

3 risposte

3

La digitazione o il linguaggio non hanno alcun impatto, quindi ignoralo.

Il modello è lo stesso, in quanto titolare di tutti i dati trasmessi per la visualizzazione.

C'è una differenza nella Vista - dove l'originale ha costruito una GUI che era persistente, l'equivalente Web costruisce una GUI ogni volta che viene fatta una richiesta dal browser client. Tuttavia, entrambi stanno facendo lo stesso tipo di lavoro (approssimativamente) - costruendo una vista, è solo che uno è persistente e l'altro transitorio. Le operazioni su uno chiamano direttamente il controller per manipolare gli elementi, mentre l'altro ha un browser come "proxy" per questo, solo chiamando il controller quando si fa clic sui collegamenti che richiedono una vista aggiornata.

Questo suggerisce che la parte Controller è la differenza principale - mentre l'originale usato per indirizzare i messaggi ai gestori di eventi per manipolare gli elementi della GUI, la versione web è più interessata a instradare la richiesta per una vista.

Quindi direi che c'è poca differenza da un punto di vista concettuale, anche se grandi differenze nell'implementazione, ma allora si potrebbe dire questo su un sistema MVC creato usando C ++ MFC e un altro creato usando Swift e Cocoa per esempio. Immagino che potresti creare un sistema desktop MVC che ricreasse il display GUI ogni volta che veniva premuto un collegamento (e potrei dire che succede comunque, se fai clic su un pulsante che fa apparire una finestra di dialogo, crea una vista completamente nuova per te). Allo stesso modo, la persistenza dei dati è la stessa: molte GUI spesse scrivono direttamente in un database e sebbene non recuperino lo stato per ogni richiesta, l'utilizzo dello stato di sessione o meno non è esattamente un aspetto fondamentale di MVC.

    
risposta data 21.10.2015 - 17:07
fonte
2

L'uso originale di MVC nei framework desktop GUI è fondamentalmente diverso dai framework MVC lato server come RoR o ASP.Net MVC. L'architettura MVC web è ispirata dal MVC originale (da cui il nome) ma non è lo stesso schema, dal momento che la richiesta-risposta o il web è fondamentalmente diverso da un'interfaccia grafica desktop interattiva. Se provi a pensarlo come lo stesso schema ti confonderai (come dice chiaramente il ragazzo che stai citando), quindi è meglio pensarlo come due modelli diversi per architetture diverse che condividono lo stesso nome.

    
risposta data 21.10.2015 - 16:39
fonte
0

Ok, morderò, ma un piccolo disclaimer: Non ho alcuna fonte di supporto (almeno a cui posso collegarmi, potrebbero essere là fuori) e questo è scritto esclusivamente dal mio comprensione / interpretazione delle intenzioni originali di MVC che potrebbero non essere corrette.

Originariamente MVC aveva senso perché i motori GUI gestiti da eventi gestiti pesantemente (come un gestore di finestre o un DOM) non esistevano. Hai avuto un modello, una vista (monitor) e un controller (tastiera). Ora, ogni volta che qualcosa è stato attivato sul dispositivo di input (tastiera) è necessario modificare il modello e successivamente aggiornare la visualizzazione. Questo era il solito paradigma dell'interfaccia utente in quel momento - poi sono arrivati i gestori di finestre.

I gestori di finestre hanno sottratto il dispositivo di input, legando insieme la vista e il controller. Non hai più ricevuto una "tastiera y è stata premuta" -event, ma piuttosto una "casella di testo1 aveva una y applicata" -event, o nel caso di un mouse non era più "mouse cliccato al punto (400, 500)" , ma "il mouse ha fatto clic sopra il pulsante 1". L'interfaccia utente era ora interattiva , e sono sicuro che la maggior parte dei gestori di finestre utilizzano puro MVC sotto il cofano e mantiene un modello di dove sullo schermo button1 è e quale elemento ha il focus ecc. Ecc.

Avanti veloce; le persone continuavano a usare la parola "MVC" nella programmazione interattiva della GUI, ma in un certo senso perse il suo significato. Ricordo quando ero uno studente e imparammo a conoscere MVC, e provai in qualche modo ad adattarlo allo java swing. Non ho mai capito completamente perché dovevamo farlo, dato che non aveva assolutamente senso ... Qual era l'input adesso? Perché dovrei separare l'aspetto dei pulsanti dalle opzioni di input quando entrambi erano già uniti per me nella classe jButton? Questo è dove penso che un sacco di confusione provenga da ...

Ora, un altro piccolo e popolare modo di programmare un'interfaccia utente sta sfruttando l'HTTP e il world wide web. MVC lato server è rinato con una tonnellata di framework che si aprono abbracciando il pattern nella sua intenzione originale. Qualcosa accade come input (una richiesta HTTP) che altera il modello e infine aggiorna la vista (facendo una risposta di alcuni html).

Tutto bene. Abbiamo interfacce grafiche interattive con gestori di finestre (come WPF, JavaFX, Qt, ecc.) E abbiamo GUI non interattive (come HTTP o MMI incorporati).

Quindi quali di questi sono MVC lato client sul Web? Direi che somigliano più alle GUI interattive che a quelle non interattive. Hai un DOM che gestisce sia l'aspetto che i comportamenti e hai una vista / controller strettamente legata (almeno secondo la definizione originale di MVC). Secondo me questo porta alla stessa conclusione che per la programmazione desktop; MVC originale non si adatta e qualcosa come MVP (che molte "implementazioni MVC" assomigliano molto a) o MVVM ha più senso.

Quindi, torna alle tue domande originali:

In other words, does the fact that we're ususing

JavaScript, a loosely typed and very different language from the ones used when the MVC pattern was designed

and use the DOM + CSS, a predefined simplified method of rendering content, whereas before web development, applications used their own rendering engines or rendering libraries to display content, perhaps making the MVC pattern more necessary

change the way we should define and use the MVC pattern in a web development environment? Are there any fundamental differences in the original usage of MVC in a non web environment and using MVC in web development?

IMHO, sì. Esistono differenze fondamentali nell'utilizzo originale di MVC in un ambiente non Web e utilizzo di MVC nello sviluppo web e probabilmente dovremmo cambiare il modo in cui lo definiamo, ma a questo punto penso sia troppo tardi. Lascia che il buzzer continui a dire MVC, mentre il resto di noi si riferisce a "Original MVC" o "Buzzword MVC":)

    
risposta data 21.10.2015 - 16:55
fonte

Leggi altre domande sui tag