Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 4)

Estamos na quarta parte desta coletânea de artigos e tutoriais para migração de aplicações Delphi (e também C++ Builder).

Iniciamos por uma visão geral de projetos de migração (parte 1), passamos por impactos do Unicode (ou não) em projetos Delphi e C++ (parte 2), e também por compilação nativa 64 bit, disponível desde o XE2 (parte 3).

Hoje vamos abordar migração de frameworks de acesso a dados, ou seja, BDE, ADO, DBX, IBX, e tantos outros disponíveis.

Iniciando pelo saudoso BDE, este framework de acesso a dados possui algumas características que o diferenciam de todos os demais. O BDE pode ser considerado – guardadas as devidas proporções – um middleware. Isto porque, para funcionar, o BDE necessita de uma instalação completa no sistema operacional onde seu projeto será executado, o que não ocorre com nenhum outro framework Delphi ou C++. Ele possui dlls as quais são responsáveis pelo acesso aos mais diversos banco de dados, em um processo que ocorre de maneira externa ao espaço de memória e ao processo alocado pela aplicação. Complicou? Então vamos detalhar isso um pouco mais…

Por tratar-se de um processo externo a sua aplicação, algo como uma camada adicional carregada no momento em que uma conexão com o banco de dados é estabelecida pela primeira vez por esta aplicação, o BDE permitia algumas “peripécias” não suportadas por outro frameworks, como por exemplo:

  • O BDE permitia facilmente suportar múltiplos banco de dados, de maneira quase transparente, isso graças a esta camada intermediária, que fazia a “conversação” com cada um dos banco de dados suportados, e entregava uma resposta homogênea para sua aplicação. Na prática, sua aplicação não sabia efetivamente a qual banco de dados estava  conectado, digamos assim.
  • O BDE, por tratar-se de um processo externo a sua aplicação, permitia as aplicações compartilharem uma mesma conexão com o banco de dados entre distintos executáveis. Basicamente, tudo o que você tinha que fazer era utilizar um “handle” compartilhado e voilà, podemos ter uma aplicação modularizada em distintos executáveis em uma mesma máquina compartilhando da mesma conexão ao banco de dados.

Outros frameworks, como DBX, também apresentação dlls externas, porém as mesmas não representam um processo externo a sua aplicação, ao contrário, são carregadas no espaço de memória do executável principal, não permitindo o compartilhamento da conexão.

Os demais, como o FireDAC, são código 100% Pascal ou C++, e são compilados efetivamente com sua aplicação, não possuindo drivers externos de qualquer espécie, sendo uma enorme vantagem no deployment e também em aplicações multiplataforma.

De todos eles, o FireDAC aparece com o melhor framework disponível atualmente para acesso a dados, sendo disparado a melhor opção para migração de BDE, já que ele “imita” o comportamento do mesmo, exceção feita ao compartilhamento de uma conexão entre executáveis distintos, o que pode ser solucionado de outras maneiras (utilização de BPLs, multicamadas, pool de conexões, etc.).

FireDAC possui características que nenhum outro framework oferece, seja no mundo Delphi e C++ Builder, seja em qualquer ambiente de desenvolvimento, como .NET ou Java. Um deles é o suporte a consultas SQL em bases de dados heterogêneas, em resumo, fazer uma Join entre Oracle e SQL Server e um arquivo XML, para citar um exemplo apenas.

Migrando seu Projeto

Existem muitas formas de se migrar um projeto, algumas mais eficientes que ouras, mas você não vai encontrar uma receita mágica. Existem sim alguns recursos realmente úteis e de alta produtividade, os quais vou resumir abaixo.

Iniciando por conhecer melhor o FireDAC, recomendo estes webinars, gravado para a série Delphi Academy:

  1. Acesso a Dados com FireDAC
  2. FireDAC Cached Updates
  3. FireDAC DataSets em Memória
  4. FireDAC Local SQL Cache
... algumas horas depois...

Agora que você já conhece o beabá do FireDAC, a migração efetiva pode ser facilitada em muito com a utilização de um utilitário chamado reFind.exe. Trata-se de um executável de linha de comando, o qual – com a ajuda de expressões regulares – vai fazer um parser em seu projeto, de acordo com configurações que você vai determinar em um arquivo de script, e substituir o antigo framework pelo FireDAC.

Felizmente, já faz parte do pacote de exemplos que a ferramenta traz, scripts para migração de BDE e DBX, ambos para FireDAC. Mas observe que, baseado nos scripts existentes, e na documentação, você será capaz de criar seu próprio script, e migrar qualquer outro framework ou componente, não há nada no reFind criado especialmente para o FireDAC, neste caso o FireDAC é um caso de uso do reFind.

Detalhes sobre o reFind você pode encontrar nestes links da documentação:

http://docwiki.embarcadero.com/RADStudio/Berlin/en/Migrating_dbExpress_Applications_to_FireDAC
http://docwiki.embarcadero.com/RADStudio/Berlin/en/ReFind.exe,_the_Search_and_Replace_Utility_Using_Perl_RegEx_Expressions

Mas também tenho um tutorial completo de migração em um dos episódios do Academy, onde algumas técnicas e recursos adicionais são discutidos:

Bem, por hoje é o que temos ;-). Espero que estes recursos sejam úteis de alguma forma, e no próximo – e último artigo da série – vamos explorar a migração de componentes de terceiros.

Até lá!

 

Advertisements

2 thoughts on “Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 4)

  1. Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 5) | It's All About Code!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s