Voltar

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

Neste artigo abordamos a criação de BPLs e consequentemente a modularização que pode ser obtida com seu uso. Uma BPL é um recurso do Delphi que permite centralizar recursos (procedimentos, funções, classes, tipos, etc) que podem ser compartilhados por mais de um projeto. Veremos as diferentes formas de se carregar uma BPL e as vantagens de seu uso.


Em que situação o tema é útil:

A criação de BPLs é útil, pois podemos reutilizar código entre projetos, além de que em sistemas grandes, pode se modularizar a carga de recursos. Por exemplo, se criarmos BPLs de acordo com as funcionalidades de um sistema, podemos carregar somente as que estarão em uso, de acordo com o perfil de um usuário logado, ou setor da empresa onde o mesmo está instalado. Outro ponto é que ao dividir um projeto em BPLs, estamos diminuindo o tamanho do executável final, o que facilita em uma atualização de sistema por exemplo (pois menos bytes serão transferidos até o cliente).

Modularização com BPLs:

Uma BPL é conceitualmente muito similar a uma DLL, mas é destinada a sistemas Delphi. É utilizada para centralizar recursos compartilhados, almejando uma reutilização de código e de recursos. Neste artigo abordamos a criação de BPLs, os tipos linkagem oferecidos pelo Delphi, os tipos de carga de BPLs, como inserir formulários nessas BPLs e consumir esses formulários .

Desenvolver uma aplicação em pacotes (packages) do Delphi é um padrão pouco utilizado entre os desenvolvedores, mas veremos ao longo do artigo que esta prática pode proporcionar várias vantagens. Quando escrevemos e compilamos uma aplicação Delphi, tipicamente é gerado um único arquivo executável que não depende de ninguém para funcionar. Para entender como que uma modularização pode impactar ao criar um novo aplicativo VCL no Delphi XE 2, salva-lo da forma que foi criado e executá-lo, teremos um executável de 6.75MB. Isso mesmo, quase 7MB. Porém podemos alterar a forma como um executável é gerado, ativando o parâmetro Link with Runtime Packages do menu Project>Options>Packages>Runtime Packages, como mostra a Figura 1.

Opção Link with Runtime Packages
Figura 1. Opção Link with Runtime Packages
Nota: A localização do menu apresentado contempla as versões XE e XE 2 do Delphi

Agora o executável gerado possui apenas 2.18MB. O valor padrão do parâmetro de compilação Link with Runtime Packages é false, assim, sempre que construímos uma aplicação Delphi o compilador adiciona no executável gerado todo o código que é necessário para que o mesmo possa ser executado. Por isso o executável é grande, o uso de pacotes (packages) não está sendo empregado.

Definindo package

A definição para package é bem simples. Ela nada mais é do que um tipo especial de DLL que é utilizada por aplicações Delphi e pelo próprio IDE. Não é algo novo, o conceito de packages existe desde a versão 3 do Delphi.

Seu uso torna possível alocar partes de nossa aplicação em módulos separados que podem ser compartilhados com outras aplicações. Outro cenário de vantagem é quando apenas uma pequena parte da aplicação sofre uma atualização, uma correção de bug por exemplo. Se o conceito de packages está em uso, é possível atualizar em seu cliente somente a package necessária e não toda a aplicação.

Existem basicamente dois tipos de packages:

  • Runtime – funciona como DLLs padrão, suas funcionalidades estão acessíveis durante a execução do aplicativo;
  • Design – utilizada para instalação de componentes no IDE do Delphi e para criação de editores de propriedades diferenciados. Este tipo de package é utilizado apenas pelo Delphi e nunca é distribuído em uma aplicação.

DLLs vs. BPLs

Uma DLL centraliza código que pode ser utilizado por vários aplicativos. É exatamente isso que a torna poderosa, quando retiramos códigos de aplicativos e os colocamos em uma área compartilhada que outros podem acessar. Sem dúvida alguma o melhor exemplo de uso de uma DLL está na própria API dos Windows que é composta por várias DLLs.

É possível inserir em uma DLL um formulário Delphi e reutilizá-lo, outro uso comum é armazenar arquivos de recursos como imagens. Mas antes de comparar uma DLL com uma BPL temos que entender as duas maneiras de se linkar código em um executável: de forma estática ou dinâmica.

...
Quer ler esse conteúdo completo? Tenha acesso completo