J'ai du mal à comprendre le modèle MVC. J'ai travaillé avec des frameworks MVC comme ASP.NET MVC et Django, mais la structure du projet est à peu près forcée, donc cela n'a vraiment pas aidé à comprendre comment créer mes propres applications en fonction de ce modèle. Pour clarifier les choses, j'ai décidé d'écrire l'exemple le plus simple de ma compréhension de MVC (programme console en Python) et de déterminer s'il y a quelque chose de mal.
|- program:
|—— controller.py
|—— model.py
|—— view.py
|—— db.txt #simulates database
Voici donc ma structure de base. Ce que ce programme va faire, c'est afficher toutes les personnes qui se trouvent dans db.txt. J'utilise db.txt (json) pour simuler une base de données réelle.
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
Voici donc le scénario où l'utilisateur veut voir toutes les personnes dans la base de données:
Cette approche est-elle correcte?
L'architecture MVC est très large et peut changer en fonction du langage de programmation et du type d'application que vous faites, donc dans ce cas, oui, votre approche peut être acceptée comme correcte.
Ce que j'ai appris des langages typés statiques, c'est que vous définissez le modèle et les vues comme des entités distinctes complètes, et le contrôleur prend une instance du modèle et des vues comme paramètres.
Ce que vous devez vous demander pour définir si votre application est MVC est le suivant:
Si rien ne casse et que le contrôleur fait toutes les communications, alors oui, votre application est MVC.
Vous voudrez peut-être examiner les modèles de conception tels que Singleton, Factory et d'autres qui utilisent tous l'architecture MVC et définir des moyens de l'implémenter.