vista tutorial que programar mvc modelo español ejemplo controlador python model-view-controller

python - tutorial - programar en mvc



MVC el ejemplo más simple (1)

Estoy luchando por entender el patrón MVC. He estado trabajando con frameworks MVC como ASP.NET MVC y Django, pero la estructura del proyecto es bastante forzada, así que realmente no ayudó a entender cómo crear mis propias aplicaciones basadas en este patrón. Para aclarar las cosas, decidí escribir el ejemplo más simple de mi comprensión de MVC (programa de consola en Python) y averiguar si hay algo mal.

|- program: |—— controller.py |—— model.py |—— view.py |—— db.txt #simulates database

Entonces esta es mi estructura básica. Lo que este programa hará es mostrar a todas las personas que están dentro de db.txt. Yo uso db.txt (json) para simular una base de datos real.

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

Entonces este es el escenario cuando el usuario quiere ver a todas las personas en el db:

¿Es este enfoque correcto?


La arquitectura MVC es muy amplia y puede cambiar dependiendo del lenguaje de programación y el tipo de aplicación que esté haciendo, por lo que en este caso, sí, su enfoque puede aceptarse como correcto.

Lo que he aprendido de los lenguajes tipados estáticos es que define el modelo y las vistas como entidades separadas completas, y el controlador toma una instancia del modelo y de las vistas como parámetros.

Lo que necesita preguntarse a sí mismo para definir si su aplicación es MVC es la siguiente:

  • Si cambio algo en la vista ¿rompo algo en el modelo?
  • Si cambio algo en el modelo ¿rompo algo en la vista?
  • ¿El controlador está comunicando todo, tanto en vista como en modelo, para que no tengan que comunicarse entre sí?

Si nada se rompe y el controlador hace toda la comunicación, entonces sí, su aplicación es MVC.

Es posible que desee examinar patrones de diseño como Singleton, Factory y otros que utilizan la arquitectura MVC y definir formas de implementarlo.