Desenvolvimento em camadas usando PyGTK
Esse post refere-se a um programa simples que eu e o Muriel de Souza Godoi desenvolvemos para ministrar um mini-curso “Desenvolvimento em Software Livre” no IV Jornada Linux aqui em Maringá.
O programa é um cadastro de eventos simples, mas que buscou trabalhar conceitos interessantes, tais como:
- Controle de versão - Subversion;
- Desenvolvimento dividido em camadas de modelo, controle e visão;
- Prototipação de Interface;
- DAO (Data Access Object) - Padrão para persistência de dados que permite separar regras de negócio das regras de acesso a banco de dados; etc.
Vale dizer que a aplicação não foi baseada no MVC puro, mas sim algo próximo, que permitiu perceber o acesso aos dados, a lógica de negócios e a apresentação. Na figura ao lado podemos perceber um diagrama simples que exemplifica como a aplicação foi dividida.
O uso do Glade para desenvolvimento da interface, interfere um pouco na idéia de se criar um MVC puro, pois seu uso correto não só desenha a interface, como também cria as chamadas para funções que seria tarefa do Controle.
A seguir parte do código em que essa “amarração” foi feita:
from app.compromissodao import CompromissoDao from app.controle import Controle from app.interface import Widgets modelo = CompromissoDao() controle = Controle() interface = Widgets() controle.set_modelo(modelo) controle.set_interface(interface) interface.set_controle(controle)
O aplicativo foi distribuido sob GPLv.2 com o motivo de estudo e o download do pacote pode ser feito clicando aqui
Hi, this is a reply to the comment you posted on my blog
Between my problems with portuguese, my problems with gtk and my problems with the 5 minutes, it was me who had the problem understanding
olá ,
quando vc diz que o uso do Glade interfere na ideia de se criar um MVC puro vc se refere a essa linha de codigo:
interface.set_controle(controle)
Poderia explicar isso melhor: não tenho conseguido aplicar o MVC nao sua essencia usando o glade e acredito que vc tenha a resposta!
obrigado!
Olá Gustavo!
Não estou me referindo apenas a essa linha, mas ela também vai contra a essência do MVC…
Para atingirmos o MVC, seria necessário que:
* Setar o controle com um objeto da interface e um objeto do modelo - de forma que o controle pegue as informações da interface e envia ao modelo;
* Setar no modelo um objeto da visão, para que ela verifique quando os dados foram mudados, para que o controle possa capturar os dados e atualizar a interface.
Note que quando eu digo atualizar os dados no modelo, não estou falando especificamente da persistência de dados, por isso também utilizamos a idéia de DAO [1] para encapsular tudo isso!
Chegar ao MVC puro usando glade é possível se todos os eventos criados no glade forem manipulados pelo controle, o que fica meio sem explicação, pois existem eventos que são criados no próprio desenvolvimento da interface sem a necessidade da manipulação deles no código! … Resumindo, é possível mas você acaba deixando de usar facilidades do glade para atender inteiramente ao padrão! Tudo isso na minha opinião!
Até mais
[1] http://en.wikipedia.org/wiki/Data_Access_Object
qual a necessidade dos métodos get e set na classe compromisso? isto está mais parecendo tradução de programa java para python…
Olá Alan
Necessidade? Não é uma necessidade… Apenas questões de projeto, legibilidade na utilização dos dados e uma certa padronização!
A idéia de “getters and setters” não foi inventada no Java. Se for pesquisar, esse padrão (não uma obrigação) é utilizado a muito tempo, até por alguns programadores de Ada e Smalltalk.
Um padrão é independente de tecnologia, mas quando ele é criado a partir de uma linguagem é interessante que ele seja levado para as outras.
Rodrigo, sei bem disto, mas, enfim, este não é o idioma nem o estilo utilizado pela comunidade Python