MVC es un arquitectura y hay muchas maneras de implementarla. Me voy a referir a la única implementación que conozco y esta es la orientada a objetos.. mediante unas clases que representan cada uno de los elementos de este patrón. También tengo que aclarar que no soy un experto en la materia y hablo solamente de la experiencia que he tenido con Django y PyQt.
En la clase modelo básicamente se especifican los atributos e implementan las operaciones CRUD (Create Read Update Delete), el controlador realiza el trabajo de mediar entre el modelo y la vista, y la vista se encarga de la representacion de los datos. Para dar un ejemplo especifico hablemos de una aplicación hipotética que almacene datos sobre libros. -El modelo se encargaría de almacenar los datos sobre los libros (digamos titulo y autor) y tendría un método para filtrar los libros por autor, supongamos. -El controlador tendría un metodo para realizar una búsqueda por autor y enviar los datos a una vista para que estos fueran visualizados -Y la vista mostraría los datos, por ejemplo utilizando html La ventaja de MVC es que como los elementos están desacoplados, si inicialmente la aplicacion utiliza archivos planos para almacenar los datos y después se decide utilizar una base de datos, solo hay que modificar el modelo. Si se quiere restringir que los libros de cierto autor aparezan en el resultado de la búsqueda, se modifica el controlador.Y, si se decide que ya no se van a visualizar los datos en html, sino en un archivo en formato pdf, se modifica la vista. Django es un framework para desarrollo de aplicaciones web, como web2py asi que me imagino qeu deben ser similares. MUY a manera de ilustración, el código de nuestra a aplicacion hipotética se podría ver mas o menos así: El modelo: Class Libro(Model): titulo = CharField(max_length=50) autor = CharField(max_length=50) El controlador (que en django se llama view) def busqueda_por_autor(request, autor): libros = Libro.objects.filter(autor=autor) render_to_response('template.html', {'listado':libros}) Y la vista (que en django es el template) <html> ... <ul> {% for libro in listado %} <li>{{libro.titulo}}</li> {% endfor %} </ul> ... </html> No se si la sintaxis del anterior código este bien o mal, el propósito es mostrar la idea general. Qt ,que es similar a GTK, maneja Modelo, Delegado, y Vista. Averigua por PyQt que propociona bindings para python. Espero haber ayudado y entendido bien la pregunta Daniel Sarmiento 2011/4/28 Chema Cortes <pych...@gmail.com>: > El día 28 de abril de 2011 02:21, lopz <lowlife...@gmail.com> escribió: > >> Podrías ponerme un ejemplo de como debería hacerlo? > > Me pones en un compromiso, ya que no uso ni gtk ni web2py. Para > implementar bien el patrón MVC se requieren otros patrones como > facade, observer, mediator,... que hace complicado cualquier ejemplo. > Es mejor que te mires algunos de los frameworks MVC que tienes > accesibles para gtk: > > pygtkMVC, un MVC básico para GTK: > http://sourceforge.net/apps/trac/pygtkmvc > > AVC (Aplication-View-Controller), una implementación MVC que conecta > automáticamente variables y señales para diversos GUIs: > http://avc.inrim.it > > PureMVC: un completo patrón MVC para python (y otros lenguajes) > http://trac.puremvc.org/PureMVC_Python > > >> Dice que la vista no puede dar órdenes, pero al momento de iniciar el >> modem por ej >> cómo sería la cosa? >> Como debo hacer para que al presionar un botón se inicie los 2 servicios? >> Ya con esto de idea podré hacer el resto > > Intentaré darte una visión global: > > La clase ControlService es en realidad una vista, que instanciaría en > el controlador. Así mismo, también la clase ControlData sería una > vista, aunque movería la parte de actualización de datos al > controlador para mejorar el desacople. > > Para establecer una comunicación entre vista y controlador, puede que > lo más fácil de ver sea a través de una cola de eventos. Para ello el > módulo 'queue' de python suele ayudar. Creas una queue donde las > vistas escriban y sólo el controlador lea y borre. En esta queue > (FIFO) van entrando los eventos, simples objetos con dos atributos, > uno de tipo de evento y otro con el mensaje. > > En el caso de pulsar el botón de inicio del módem: la vista mete en la > queue un evento de tipo "INIT_MODEM" (por ejemplo). El controlador, > que va revisando la pila, lee el evento y decide actuar: puede > arrancar los dos servicios del modem,...o lanzar un error, o no hacer > nada (que para eso es el que manda). El controlador, después de > procesar el evento y eliminarlo de la pila, manda mensajes de > actualización a las vistas, y sigue con el siguente evento. Los > mensajes enviados pueden ser simples llamadas a los métodos de las > vistas o, para hacerlo más genérico, se podría implementar algún > patrón "observer" que posibilite la actualización conjunta de varios > elementos gráficos a la vez (algo que en gtk se hace normalmente con > "señales"). > > > Ya perdonarás que no ponga código, pero no tengo nada con qué > ilustrarte. Aún así, espero que te haya aclarado algo. > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/