Patrón de controlador de vista de modelo
El controlador de vista de modelo es el patrón de diseño más utilizado. A los desarrolladores les resulta fácil implementar este patrón de diseño.
A continuación se muestra una arquitectura básica del controlador de vista de modelo:
Veamos ahora cómo funciona la estructura.
Modelo
Consiste en una lógica de aplicación pura, que interactúa con la base de datos. Incluye toda la información para representar datos al usuario final.
Ver
Ver representa los archivos HTML, que interactúan con el usuario final. Representa los datos del modelo al usuario.
Controlador
Actúa como intermediario entre vista y modelo. Escucha los eventos desencadenados por la vista y el modelo de consultas para los mismos.
Código Python
Consideremos un objeto básico llamado "Persona" y creemos un patrón de diseño MVC.
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
Requiere un método, que recupera todos los registros de la tabla Person en la base de datos. Los registros se presentan en formato JSON.
Ver
Muestra todos los registros obtenidos dentro del modelo. La vista nunca interactúa con el modelo; El controlador hace este trabajo (comunicándose con el modelo y la vista).
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!'
Controlador
El controlador interactúa con el modelo a través del getAll() método que recupera todos los registros mostrados al usuario final.
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()