Padrão de controlador de visualização de modelo

Model View Controller é o padrão de design mais comumente usado. Os desenvolvedores acham fácil implementar esse padrão de design.

A seguir está uma arquitetura básica do Model View Controller -

Vamos agora ver como funciona a estrutura.

Modelo

Consiste em pura lógica de aplicativo, que interage com o banco de dados. Inclui todas as informações para representar os dados para o usuário final.

Visão

View representa os arquivos HTML, que interagem com o usuário final. Ele representa os dados do modelo para o usuário.

Controlador

Ele atua como um intermediário entre a visualização e o modelo. Ele ouve os eventos disparados pelo modelo de visualização e consultas para os mesmos.

Código Python

Vamos considerar um objeto básico chamado “Pessoa” e criar um padrão de projeto 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

Ele chama um método, que busca todos os registros da tabela Person no banco de dados. Os registros são apresentados no formato JSON.

Visão

Ele exibe todos os registros buscados no modelo. O modo de exibição nunca interage com o modelo; o controlador faz esse trabalho (comunicando-se com o modelo e a visualização).

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

O controlador interage com o modelo por meio do getAll() método que busca todos os registros exibidos para o usuário 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()