Foros del Web » Programando para Internet » Python »

[Aporte] Patrón MVP con wxpython y SQLAlchemy

Estas en el tema de [Aporte] Patrón MVP con wxpython y SQLAlchemy en el foro de Python en Foros del Web. Introducción Últimamente he estado recibiendo la misma pregunta una y otra vez, como organizar el código cuando tienes aplicaciones de escritorio. Y siempre respondo lo ...
  #1 (permalink)  
Antiguo 29/03/2013, 16:51
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
[Aporte] Patrón MVP con wxpython y SQLAlchemy

Introducción
Últimamente he estado recibiendo la misma pregunta una y otra vez, como organizar el código cuando tienes aplicaciones de escritorio. Y siempre respondo lo mismo con el patrón MVC o el patrón MVP.

Incluso apunto a ejemplos como estos:
http://wiki.wxpython.org/ModelViewPresenter
http://wiki.wxpython.org/ModelViewController

Pero parece ser que los ejemplos no están del todo completos o no funcionan bien en linux o la explicación parece no estar completa.

Así que con el objetivo de llenar ese hueco que hay en la comunidad he decidido hacer este aporte.

wxPython
Para el que no lo conozca wxpython es un framework para manejar interfaces gráficas (GUI), esta basado en wxwidgets de C++ y ademas de simplificarnos mucho la tarea de creación de interfaces gráficas tiene la ventaja que es multiplaforma.

SQLAlchemy
SQLAlchemy de manera muy general es un ORM que le da al desarrollador la flexibilidad de usar objetos e interactuar con la base de datos de una manera bastante cómoda.

Patrón MVP
Antes de empezar a explicar como funciona el patrón MVP vamos a ver el diagrama de como esta estructurado.



Ahora, como pueden ver en el diagrama es bastante simple de interpretar.

El usuario tiene puntos de interacción llamados views. Un view (una vista) por lo regular es una ventana y se encargan únicamente de la presentación de los datos y de traducir eventos como OnPressButton a eventos mas significativos como Save o Delete.

Los views a su vez tienen presenters. Que se encargan de la lógica de la aplicación. Y los presenters guardan una referencia a un view a través de una interfaz pero como python no existe tal cosa usamos duck typing.

Los presenters también poseer ninguna, una o varias referencias a las instancias de los modelos.

Los modelos, son objetos que representan toda la lógica de negocios y regularmente se les delega tareas como: validación de los datos y mapeo de la base de datos.

Una vez que se hayan hecho cambios en instancias de los modelos, los modelos notifican generalmente por medio del patrón observer a los presenters y los presenter a su vez hacen llamadas para reflejar los cambios en las views. Y se hace de esta manera para que los modelos no sepan de la existencia de los presenters.

Walkthrough
models.py
Al principio del modulo se hacen algunos imports necesarios para trabajar con SQLAlchemy, se crea una session que sera el punto de partida para varias operaciones posteriores y se crea el modelo User, el solamente contiene 3 campos, nombre, apellido y correo electrónico.

presenters.py
En este modulo se definen los 3 presenters que manejaran toda la lógica de la aplicación. MainPresenter, UsersPresenter y UserPresenter. Regularmente maneja pocos eventos comunes como OnSave, OnDelete, OnExit y OnChange. La comunicación entre presenters esta manejada por una implementación del patrón observer que ya provee wxpython.

views.py
Aquí es donde esta definido todas las ventanas y donde los eventos son abstraídos y pasados a un mayor nivel de abstracción como los presenters.

main.py
Este archivo solamente es el punto de entrada de la aplicación.

Screenshots




Requisitos: Python 2.7+ SQLAlchemy wxpython


Archivos en mvp.zip
  • add.png
  • delete.png
  • edit.png
  • users.png
  • main.py
  • models.py
  • presenters.py
  • views.py
Descarga: https://dl.dropbox.com/u/107554552/mvp.zip
  #2 (permalink)  
Antiguo 30/03/2013, 00:53
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 5 meses
Puntos: 127
Respuesta: [Aporte] Patrón MVP con wxpython y SQLAlchemy

Muchas gracias por este aporte.

Ese sistema estructurado es muy lógico y evidente, pero a veces se comete el error de no plantearlo como una triestructura de elementos independientes concatenados sino como una especie de monoestructura donde las tres cosas están mezcladas de una manera cutre complicándolo más.

En fin, muy útil. Espero animarme y seguir con mi aprendizaje sobre wxpython, que lo dejé ahí plantado y eso que configuré todo para ejecutarlo y verlo cómodamente.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #3 (permalink)  
Antiguo 30/03/2013, 16:29
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 15 años, 6 meses
Puntos: 15
Respuesta: [Aporte] Patrón MVP con wxpython y SQLAlchemy

Cita:
Iniciado por dontexplain Ver Mensaje
En fin, muy útil. Espero animarme y seguir con mi aprendizaje sobre wxpython, que lo dejé ahí plantado y eso que configuré todo para ejecutarlo y verlo cómodamente.

Un saludo.

Gracias también por el aporte al autor!

dontexplain abandonaste wxPython porque te resultaba complicado? por falta de documentación?
  #4 (permalink)  
Antiguo 27/07/2013, 23:44
Avatar de jovetri  
Fecha de Ingreso: marzo-2013
Ubicación: Costa Rica
Mensajes: 1
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: [Aporte] Patrón MVP con wxpython y SQLAlchemy

Muchas gracias, no era para mi pero me sirvio.
Pura Vida

Etiquetas: wxpython
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 11:43.