2016-06-26 67 views
13

Staram się zrozumieć wzór MVC. Pracowałem z frameworkami MVC, takimi jak ASP.NET MVC i Django, ale struktura projektu jest w dużym stopniu wymuszona, więc naprawdę nie pomogło mi zrozumieć, jak tworzyć własne aplikacje oparte na tym wzorcu. Aby to wyjaśnić postanowiłem napisać najprostszy przykład mojego zrozumienia MVC (program konsoli w Pythonie) i dowiedzieć się, czy coś jest nie tak.MVC najprostszy przykład

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

To jest moja podstawowa struktura. To, co zrobi ten program, to wyświetlenie wszystkich osób znajdujących się w pliku db.txt. Używam db.txt (json) do symulacji rzeczywistej bazy danych.

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 

więc jest to scenariusz WH en użytkownik chce widzieć wszystkie osoby w bazie danych: enter image description here

Czy to podejście jest prawidłowe?

Odpowiedz

8

Architektura MVC jest bardzo szeroka i może się zmieniać w zależności od języka programowania i rodzaju aplikacji, więc w tym przypadku tak, twoje podejście może zostać zaakceptowane jako poprawne.

To, czego nauczyłem się z języków statycznych, polega na zdefiniowaniu modelu i widoków jako kompletnych oddzielnych elementów, a kontroler przyjmuje instancję modelu i widoków jako parametry.

Co trzeba zadać sobie pytanie, aby określić, czy aplikacja jest MVC jest następujący:

  • Gdybym coś zmienić w widoku mogę przełamać coś w modelu?
  • Jeśli zmienię coś w modelu, czy mogę przerwać cokolwiek w widoku?
  • Czy kontroler komunikuje wszystko w widoku i modelu, aby nie musiały się ze sobą komunikować?

Jeśli nic się nie zepsuje, a kontroler wykona całą komunikację, to tak, twoja aplikacja to MVC.

Być może warto przyjrzeć się wzorom projektowym, takim jak Singleton, Factory i inne, które wykorzystują architekturę MVC i określają sposoby jej implementacji.

Powiązane problemy