Será que um ActiveRecord funcionaria em ABAP?

Já falei uma centena de vezes que aprender uma nova tecnologia sempre ajuda. Mais uma vez Rails trazendo ventos novos para o lado do ABAP, agora com o chamado ActiveRecord.

Quando estava na Accenture, trabalhando com uma iniciativa de biblioteca de componentes digitais, estávamos pensando em componentes para ABAP. Uma das coisas que sempre sonhei era um conjunto de classes onde teríamos encapsulado os comandos de SQL.

Não foi para frente a minha idéia por vários motivos, mas principalmente falta de ousadia da minha parte para fazer as classes e começar a usar.

A idéia ficou no porão do meu cérebro por muito tempo, até eu conhecer o ActiveRecord do Rails.

O que é ActiveRecord

Basicamente o ActiveRecord é um componente do Rails responsável por todas as operações de banco de dados, trazendo uma DSL (Domain Specific Language) para acesso ao DB. Por exemplo, cada gerenciador de banco tem seu próprio set de comandos SQL, o que torna a sua aplicação totalmente dependente do banco.

Se você precisar criar outro programa que use outro banco de dados, você necessariamente precisa conhecer o set de comandos SQL daquele banco.

Com o ActiveRecord, os railers ganharam independência do banco de dados. Ou seja, você não encontra (ou não deveria) strings SLQ, mas coisa como:

@boletims = Boletim.find(:all, :order => 'boletim_date desc', :conditions => 'published = true')

O que esse comando faz? Retorna todas as entradas da tabela Boletim, onde o campo published = true, ordenado pelo campo boletim_date. Ou seja, quando rodamos o método find, o ActiveRecord transforma os parâmetros em comando SQL, específico do banco configurado para a aplicação.

ABAP precisa de um ActiveRecord? Não!

E como poderíamos fazer uma DSL para ABAP? Caramba, isso já existe no ABAP há anos: Open SQL. Que por sinal, é umas das coisas que eu levaria para do ABAP para o Rails!

Mas a minha idéia não é concorrer com o Open SQL. Minha idéia é um pouco diferente.

Finalmente, Minha Idéia

Um dos principais problemas no ABAP é a performance ruim de comandos Open SQL mal feitos no programa. Essa é o efeito colateral de DSLs. Com a facilidade de usar, vem a facilidade de se fazer código porco. Isso também acontece no Rails.

Então, essas classes que encapsulariam o acesso ao banco, já trariam essas regras de performance. Aí, o programador não precisaria se preocupar com a performance, pois já estaria nas classes. Além disso, poderia ser colocado alguma regra relaciona já contida do modelo de dados. Ainda não sei…

Estou lançando aqui a idéia para um projeto open source para pensar e gerar essas classes.