gildot

Topo
Sobre
FAQ
Tópicos
Autores
Preferências
Artigos
Sondagens
Propor artigo


8/3
gildicas
9/30
jobs
10/9
perguntas
10/25
press

 
Metastorage acelera desenvolvimento de aplicações
Contribuído por vd em 13-12-02 10:23
do departamento Programação
Bases de Dados mlemos escreve "Metastorage é uma aplicação Open Source que se destina a gerar automaticamente componentes de programação sob a forma de classes de objectos que são mapeados em bases de dados a partir de uma descrição simples num formato baseado em XML chamado CPML (Component Persistence Markup Language)".

[vd: Continua ...]
"O principal objectivo desta aplicação é reduzir drasticamente o tempo de desenvolvimento de aplicações de bases de dados. Isso é conseguido dado que o programador apenas precisa de declarar no formato XML CMPL as classes de objectos dos seus componentes que incluem as variáveis das classes, relacionamento entre objectos dessas classes, regras de validação de dados e funções para criar, manipular e armazenar os objectos na base de dados.

A partir daí a aplicação Metastorage gera todo o código que implementa as funcionalidades declaradas. Para além disso gera classes adicionais para instalação do esquema de base de dados. Tudo isto sem a necessidade do programador ter que escrever sequer uma linha de SQL.

Na prática, um programador pode reduzir para meia-hora (tempo de declarar componentes em CPML) o tempo de desenvolvimento de aplicações que demoraria dias ou semanas a desenvolver, verificar e corrigir código equivalente escrito manualmente.

Como bónus o Metastorage também gera gráficos de Entidade-Relacionamento através de diagramas de classes em UML. Abaixo pode ser visto um gráfico de um diagrama de classes gerado a partir de um componente de exemplo em CPML de aplicação do Metastorage.

No momento, o Metastorage gera o código das classes de objectos em PHP. O acesso às bases de dados é feito através da API Metabase. Esta API garante a total independência do código gerado em relação à base de dados utilizada, pelo que automaticamente inúmeros tipos de bases de dados são suportados (MySQL, PostgreSQL, Oracle, MS-SQL, Informix, Interbase, etc..)

O Metastorage é a primeira aplicação de meta-meta-programação baseada no compilador da linguagem MetaL. Isto quer dizer que na verdade o Metastorage usa um módulo do compilador do MetaL que gera todo código primeiramente na linguagem MetaL que seguidamente pode ser traduzido para várias linguagens alvo: PHP, Java, Perl, etc...

No momento, o que impede o Metastorage de gerar código para Java ou Perl é a inexistência de uma API de acesso a bases de dados equivalente ao Metabase. O Metabase proporciona de forma independente da base de dados funcionalidades críticas como a geração números sequênciais auto-incrementais que são essenciais usar em campos de chaves primárias. Uma provável versão do Metabase a ser desenvolvida por contribuidores do projecto poderá tornar uma versão do Metastorage para Java e Perl uma realidade.

Outras linguagens poderão também vir a ser suportadas se houverem voluntários interessados em contribuir para o projecto do MetaL de forma suportar a geração de código nessas linguagens.

"

Promoções de Natal | Kits de auto-instalação para Internet de banda larga gratuitos  >

 

gildot Login
Login:

Password:

Referências
  • gráfico de um diagrama de classes
  • componente de exemplo em CPML
  • Metabase
  • MetaL
  • mlemos
  • Metastorage
  • Component Persistence Markup Language
  • Mais acerca Bases de Dados
  • Também por vd
  • Esta discussão foi arquivada. Não se pode acrescentar nenhum comentário.
    Re:pois pois (Pontos:3, Esclarecedor)
    por leitao em 13-12-02 11:39 GMT (#2)
    (Utilizador Info) http://scaletrix.com/nuno/
    Foi desenvolvido pelo Manuel Lemos, e foi desenvolvido bem. E' um sistema bem pensado e muito interessante.


    "Monogamy is for guys that can't get pussy." --Steve-O.

    Re:Independencia de linguagens (Pontos:2)
    por mlemos em 13-12-02 19:22 GMT (#9)
    (Utilizador Info) http://www.ManuelLemos.net/
    Não conheço a estrutura do Glade, mas posso adiantar que a estrutura do compilador do MetaL é totalmente modular e orieantada por objectos.

    Existe uma classe central que é a do compilador em si e depois existem várias classes que implementam o suporte aos diversos tipos de comandos e estruturas de uma linguagem: expressões, variáveis, fluxo de execução, classes de objectos e outras mais específicas de sub-sistemas de programação como acesso a bases de dados, geração e processamento de formulários (Web), etc..

    Cada um destes módulos interpreta comandos definidos em XML com uma sintaxe independente da linguagem alvo. No fim do processamento de cada comando é invocado um sub-módulo que gera o código específico de cada linguagem alvo.

    Para suportar uma nova linguagem alvo é necessário apenas implementar o sub-módulos de cada módulo da linguagem MetaL.

    Depois de ter sido implementado para PHP, foi implementada uma grande parte para suportar Java e uma parte menor dos sub-módulos para Perl.

    Desenvolver sub-módulos é relativamente fácil desde que se entenda a estrutura do compilador e saiba PHP uma vez que absolutamente todo o compilador foi escrito em PHP. Um dia quando tiver tempo documento isto melhor para facilitar a compreensão dos que quiserem suportar novas linguagens.

    Neste momento todo o desenvolvimento no compilador do MetaL e aplicações derivadas como o Metastorage são motivadas pode necessidades de projectos pessoais do mundo real, quer dizer não tenho tempo de fazer investigação e desenvolvimento para fins que não sejam absolutamente fundamentais uma vez que trabalho absolutamente por conta própria.

    Aliás, eu não tinha absoluta necessidade de abrir o código do projecto. Apenas o fiz para que as pessoas possam testar, validar ou achar bugs no código antes de mim. Por outro lado, assim também dou oportunidade para que outros com motivação possam desenvolver módulos e outras linguagens para as quais eu não tenho motivação para dar prioridade no momento.

    Obviamente se existirem interessados motivados a participar de alguma foram, já sabem que podem contactar-me que darei todo apoio para o projecto evolua em direcções para onde eu não posso avançar no momento. No site do MetaL existe informação sobre a mailing list, mas quem quiser pode sempre contactar-me directamente.
    Re:Independencia de linguagens (Pontos:2)
    por mvalente em 14-12-02 0:11 GMT (#10)
    (Utilizador Info) http://www.ruido-visual.pt/
    Os parabens de sempre pelo trabalho realizado e aproveitar a ocasiao para sugerir "related stuff" que poderá ser interessante: The ZPatterns Development Framework, TransWarp e PEAK

    Cumprimentos

    Mario Valente

    OJB (Pontos:1)
    por Duke em 14-12-02 4:43 GMT (#11)
    (Utilizador Info) http://www.umproject.web.pt
    A única coisa que eu posso acrescentar é uma tecnologia similar da Jakarta. O OJB, que tem exactamente o mesmo fim(só para Java): utilização de classes persistentes em BD com mapeamento XML. A conclusão a que eu cheguei é que perdia-se mais tempo com essa arquitectura do que propriamente em fazer funções que mapeassem as classes directamente.
    Vou de certeza dar uma vista de olhos no Metastorage, na esperança que seja mais simples. Pelo que li no segundo link que o mlemos apontou, pareceu-me bastante simples: Mapear a classe num ficheiro XML, usar "php metastorage meu_file.xml".Depois as funções de ler/gravar das classes são get e persist. Right? Se for mesmo tao simples, I'm willing to give it a try...
    =)

    Samuel Martins


    God is NoWHere...
    Re:OJB (Pontos:1)
    por mlemos em 14-12-02 5:58 GMT (#13)
    (Utilizador Info) http://www.ManuelLemos.net/
    Antes de começar a desenvolver o Metastorage estive a fazer o trabalho de casa e estudei inúmeras soluções para o problema de gerir objectos persistentes para não andar a reinventar a roda.

    Encontrei muita coisa especialmente em Java e Perl, incluindo OJB. O que encontrei pude dividir em 2 tipos: frameworks e geradores.

    Nas frameworks a estrutura de dados é definida dinamicamente seja por código de configuração ou ficheiro estáticos em XML ou outros formatos.

    Os geradores criam código de API que faz o que é necessário tendo em conta tudo que é decisão estática (queries de SQL, condições baseadas em constantes, etc..) para gerar código apropriado.

    Eu preferi esta última solução uma vez que tem mais a ver com a realidade das aplicações que se desenvolve. O design de programação não muda durante o tempo de execução das aplicações pelo que é possível gerar código muito mais optimizado que as soluções das frameworks que gastam tempo de execução da compor queries SQL e tomar decisões que na verdade nunca mudam.

    Uma aplicação geradora de código que estudei e gostei em grande parte chama-se Pragmatier e gera código em VB. Na versão que vi o código gerado era horrível, não por ser em VB mas porque a API tentava fazer tudo possível e imaginável que alguém possa fazer. Resultado, apenas uma classe para mapear uma tabela com perfil de utilizadores tinha sem brincadeira 180K que correspondia a 4100 linhas de VB.

    Apesar de ter gostado do conceito dessa aplicação, cheguei obviamente à conclusão que o Metastorage teria de evitar gerar código gordo e inútil. Assim, sempre que possível gera apenas código necessário pelas funções declaradas no ficheiro em CPML. Assim, as classes têem apenas as funcionalidades que as aplicações precisam porque é o programador que indica baseado nas suas necessidades.

    Ainda é possível continuar optimizar o código gerado pelo Metastorage com estratégias mais espertas. Mas mesmo assim é tudo muito simples. Basta ver pelo exemplo.
    Re:Independencia de linguagens (Pontos:1)
    por mlemos em 14-12-02 5:14 GMT (#12)
    (Utilizador Info) http://www.ManuelLemos.net/
    Interessante. Obrigado pelas referência.

    Estive a dar uma espreitadela e no fundo parece que ninguém inventou nada pelo menos em termos de padrões de design.

    No caminho estive a ver também o DBAPI do Python até para conhecer melhor a linguagem que nunca experimentei. Não deu tempo de ver muito mas procurei saber como o DBAPI resolve a questão da geração de números sequênciais para chaves primárias. Parece que tem um tipo de coluna chamado ROWID mas não cheguei a nenhuma conclusão sobre como é gerado na prática de forma a manter as aplicações independentes da base de dados.

     

     

    [ Topo | Sugerir artigo | Artigos anteriores | Sondagens passadas | FAQ | Editores | Preferências | Contacto ]