2016-06-26 15 views
13

Non riesco a capire il modello MVC. Ho lavorato con framework MVC come ASP.NET MVC e Django, ma la struttura del progetto è pressoché obbligata, quindi non ha aiutato a capire come costruire le mie app basate su questo modello. Per chiarire le cose ho deciso di scrivere l'esempio più semplice della mia comprensione di MVC (programma di console in Python) e capire se c'è qualcosa di sbagliato.MVC l'esempio più semplice

|- program: 
|—— controller.py 
|—— model.py 
|—— view.py 
|—— db.txt #simulates database 

Quindi questa è la mia struttura di base. Ciò che questo programma farà è visualizzare tutte le persone che si trovano in db.txt. Io uso db.txt (json) per simulare il database reale.

controller.py

from model import Person 
import view 

def showAll(): 
    #gets list of all Person objects 
    people_in_db = Person.getAll() 
    #calls view 
    return view.showAllView(people_in_db) 

def start(): 
    view.startView() 
    input = raw_input() 
    if input == 'y': 
     return showAll() 
    else: 
     return view.endView() 

if __name__ == "__main__": 
    #running controller function 
    start() 

view.py

from model import Person 


def showAllView(list): 
    print 'In our db we have %i users. Here they are:' % len(list) 
    for item in list: 
     print item.name() 
def startView(): 
    print 'MVC - the simplest example' 
    print 'Do you want to see everyone in my db?[y/n]' 

def endView(): 
    print 'Goodbye!'  

model.py

import json 

class Person(object): 

    def __init__(self, first_name = None, last_name = None): 
     self.first_name = first_name 
     self.last_name = last_name 
    #returns Person name, ex: John Doe 
    def name(self): 
     return ("%s %s" % (self.first_name,self.last_name)) 

    @classmethod 
    #returns all people inside db.txt as list of Person objects 
    def getAll(self): 
     database = open('db.txt', 'r') 
     result = [] 
     json_list = json.loads(database.read()) 
     for item in json_list: 
      item = json.loads(item) 
      person = Person(item['first_name'], item['last_name']) 
      result.append(person) 
     return result 

quindi questo è il wh scenario it l'utente desidera vedere tutte le persone nel db: enter image description here

Questo approccio è corretto?

risposta

8

L'architettura MVC è molto ampia e può cambiare a seconda del linguaggio di programmazione e del tipo di applicazione che stai facendo, quindi in questo caso sì il tuo approccio può essere accettato come corretto.

Quello che ho imparato dai linguaggi tipizzati statici è che si definiscono il modello e le viste come entità separate complete e che il controllore esegue un'istanza del modello e delle viste come parametri.

Quello che c'è da chiedersi per definire se la vostra applicazione è MVC è la seguente:

  • Se cambio qualcosa nella vista posso rompere nulla nel modello?
  • Se cambio qualcosa nel modello, interrompo qualcosa nella vista?
  • Il controller comunica tutto sia nella vista che nel modello in modo che non debbano comunicare tra loro?

Se nulla si interrompe e il controller esegue tutte le comunicazioni, sì, l'applicazione è MVC.

Si potrebbe voler esaminare modelli di progettazione come Singleton, Factory e altri che utilizzano l'architettura MVC e definiscono i modi per implementarlo.