Home > PyGTK, Python, Software Livre > Desenvolvimento em camadas usando PyGTK

Desenvolvimento em camadas usando PyGTK

October 28th, 2008

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

PyGTK, Python, Software Livre , , , ,

  1. November 10th, 2008 at 09:34 | #1

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

  2. gustavo
    November 14th, 2008 at 13:35 | #2

    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!

  3. November 14th, 2008 at 14:50 | #3

    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

  4. November 15th, 2008 at 07:24 | #4

    qual a necessidade dos métodos get e set na classe compromisso? isto está mais parecendo tradução de programa java para python…

  5. November 15th, 2008 at 11:34 | #5

    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.

  6. November 15th, 2008 at 16:49 | #6

    Rodrigo, sei bem disto, mas, enfim, este não é o idioma nem o estilo utilizado pela comunidade Python :-)

  1. November 14th, 2008 at 13:03 | #1