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()