[Cascavel-pm] Exemplo de relacao many-to-many com Class::DBI

Nelson Ferraz nferraz em gnubis.com.br
Quarta Abril 13 09:50:40 PDT 2005


> Mas não seja por isso, eu ainda estou na dúvida de como usar corretamente o relacionamento da
> Class::DBI. Por exemplo, pegando como base as classes que fiz seria certo eu criar um objeto
> dbUser e acessar todos as outras classes por ele? ex: historico, grupos, etc? Ou eu teria que
> criar um objeto para cada classe? (dá pra mandar um exemplo??) :)

Rod,

Eu estou desenvolvendo uma ferramenta que pode ajudá-lo na criação dos módulos do Class::DBI, bem como scripts de criação da base de dados, templates, e toda a aplicação web. Esta ferramenta se chama AppML, e já recebeu valiosas contribuições do Luis Campos de Carvalho e do Ednardo Lobo.

A idéia é simples: ao invés de escrever o código manualmente, nós criamos uma ferramenta que faz isso por nós. 

Como isso é feito? A partir dos conceitos fundamentais de UML, desenvolvemos um dialeto em XML para traduzir as especificações de um sistema de informação. A este dialeto denominamos AppML (Application Markup Language).

Tomando a sua aplicação como exemplo, esta seria uma especificação simplificada:

<project>

  <table name="users">
    <field name="login"/>
  </table>

  <table name="groups">
    <field name="group_name"/>
  </table>

  <table name="relationship">
    <rel name="user" table="users"/>
    <rel name="group" table="groups"/>
  </table>

</project>


Na verdade a gente precisa incluir mais alguns detalhes, como os tipos dos campos (para criação das tabelas), e os textos que devem aparecer nos templates. No final, o exemplo ficaria assim:


<project name="teste" title="meu primeiro projeto">

  <table name="users" caption="usuários" descriptor="login">
    <field name="login" type="varchar" size="40" caption="login do usuário"/>
  </table>

  <table name="groups" caption="grupos" descriptor="group_name">
    <field name="group_name" type="varchar" size="40" caption="nome do grupo"/>
  </table>

  <table name="relationship">
    <rel name="user" table="users" caption="usuário"/>
    <rel name="group" table="groups" caption="grupo"/>
  </table>

</project>


Agora sim, o AppML é capaz de gerar a base de dados em SQL, os módulos, templates, e todo o código-fonte necessário para que a aplicação seja instalada em um servidor web e acessada por múltiplos usuários simultaneamente.

As principais vantagens dessa abordagem são a consistência, qualidade e produtividade. Como o AppML é um software livre (disponível sob a licença GNU GPL), você também tem a flexibilidade para modificá-lo da maneira como achar necessário.

Você encontra o AppML no seguinte endereço:

http://www.gnubis.com.br/bin/view/English/AppML

[]s

Nelson


Mais detalhes sobre a lista de discussão Cascavel-pm