Domande sull'identificazione dei componenti in MVC

3

Attualmente sto sviluppando un'applicazione client-server in node.js, Express, moustache e MySQL. Tuttavia, credo che questa domanda dovrebbe essere per lo più indipendente dalla lingua e dal framework.

Questa è la prima volta che eseguo un'applicazione MVC reale e ho difficoltà a decidere esattamente cosa significhi ciascun componente. (Ho fatto delle applicazioni web che potrebbero essere chiamate MVC prima, ma non mi riferirei con fiducia a loro come tali)

Ho un server.js che lega insieme l'intera applicazione. Fa l'inizializzazione di tutti gli altri componenti (compresa la connessione al database e quelli che penso siano i "modelli" e le "viste"), riceve le richieste HTTP e decide quali "viste" usare.

Significa che il mio file server.js è il controller? O sto mescolando il codice che non appartiene a questo? Quali componenti dovrei interrompere il file server.js in?

Alcuni esempi di codice nel file server.js:

var connection = mysql.createConnection({
    host : 'localhost',
    user : 'root',
    password : 'sqlrevenge',
    database : 'blog'
});

//...

app.get("/login", function (req, res) { //Function handles a GET request for login forms
    if (process.env.NODE_ENV == 'DEVELOPMENT') {
        mu.clearCache();
    }

    session.session_from_request(connection, req, function (err, session) {
        if (err) {
            console.log('index.js session error', err);
            session = null;
        }

        login_view.html(res, user_model, post_model, session, mu); //I named my view functions "html" for the case I might want to add other output types (such as a JSON API), or should I opt for completely separate views then?
    });
});

Ho un altro file che appartiene al nome session.js . Riceve un oggetto cookies , legge i dati memorizzati per decidere se si tratta di una sessione utente valida o meno. Include anche una funzione denominata login che modifica il valore dei cookie.

  • In primo luogo, pensavo che sarebbe stato parte del controller, dal momento che si occupava dell'input dell'utente e dei dati forniti ai modelli.
  • Poi, ho pensato che forse era un modello dal momento che trattava i dati dell'applicazione / database e i dati che fornisce sono usati dalle viste.
  • Ora, mi chiedo anche se possa essere considerato un View , dal momento che emette i dati (i cookie fanno parte delle intestazioni HTTP, che vengono emesse)
posta luiscubal 13.09.2012 - 18:53
fonte

2 risposte

1

Bene, il modo più sicuro per ricordare i dettagli dietro MVC è quello di imparare la canzone MVC.

link

Un altro approccio semplice è:

  • Se puoi vederlo, fa parte della vista.
  • Se implementa la logica aziendale, è il modello.
  • Se converte un gesto o un'azione nell'interfaccia utente in un'operazione impostata inviata al modello, fa parte del controller.

Mi piace anche la descrizione in questa pagina.

link

    
risposta data 14.09.2012 - 23:57
fonte
0

È sicuramente considerata la migliore prassi per mantenere le opinioni pulite dalla logica di controllo e dai problemi di livello inferiore come i cookie e la sessione. In genere tali problemi vengono gestiti dal controller che chiama i metodi o i servizi di supporto per determinare i modelli di flusso logico (sessione) o di visualizzazione di ritorno (ASP.Net MVC) o variabili di istanza (Rails) che verranno passati alla vista. Le chiamate ripetute a questi servizi o sessioni possono essere ulteriormente ridotte utilizzando il concetto di filtri (before_filter in Rails e Action Filters in ASP.Net) che vengono chiamati implicitamente prima del richiamo del controller.

Quindi questi tipi di preoccupazioni sono più strettamente associati al controller rispetto alla vista e l'uso di helper o servizi può mantenere il controller pulito dal codice ripetitivo.

    
risposta data 13.09.2012 - 20:40
fonte