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