[Delphi] Parametrização do comportamento de um software

Alô, pessoal! Semana passada, comentei sobre a parametrização para personalizar o comportamento de um software conforme o perfil do cliente, lembram-se? Esse tipo de funcionalidade traz flexibilidade para o software, além de várias vantagens para os próprios desenvolvedores. Mas, afinal, o que é essa parametrização, como funciona e como podemos implementá-la? “Bora” pro artigo!

Introdução

Precisamos definir os parâmetros do nosso investimento, como o valor e o prazo.

Consegue identificar o sentido do emprego da palavra “parâmetros” na frase acima? Tenho certeza que sim. Significa que o valor e o prazo serão dados variáveis, e não fixos. O investimento pode ser de 40 mil para este ano e de 50 mil para o ano que vem. Em outras palavras, a definição destes parâmetros depende da situação atual.

Da mesma forma, o comportamento de um software também depende de quem está o utilizando. Por exemplo, um dos usuários precisa exportar os dados de um histórico de compras no formato XLS para que possa editá-los. Outro usuário do mesmo software solicita essa exportação em formato PDF, de modo que o arquivo possa ser enviado por e-mail para vários destinatários.

Simples! Basta gerar um executável diferente para cada um dos usuários, não é?
No artigo sobre parâmetros na Query, levantei uma questão bem semelhante. A diferença é que, naquele artigo, expliquei a parametrização em consultas SQL e, neste artigo, explico a parametrização do comportamento do software.

Pois bem, já reparou que alguns desenvolvedores gostam de programar com fundo branco, enquanto outros preferem o fundo preto? Essa é uma opção da ferramenta de desenvolvimento, que permite a personalização conforme a preferência do desenvolvedor. Observe que não há uma versão exclusiva para cada cor de fundo. Quem define essa aparência é o usuário que utiliza a ferramenta. Então, respondendo a pergunta: não, não devemos gerar um executável diferente para cada usuário. O correto é gerar um único executável e personalizar o comportamento do software para cada um deles.

Parâmetrização do software

Podemos alcançar essa customização do comportamento por meio de parâmetros, ou você também pode chamá-los de “configurações”.

Estes parâmetros consistem em uma tela no software que permite a definição de alguns valores para o seu funcionamento, nos quais podem ser diferentes para cada usuário do sistema. A imagem abaixo é um exemplo de uma tela de opções. Basta configurá-los para que o sistema se comporte da forma esperada.

Exemplo de parâmetros do sistema

Como posso implementá-los no meu software?

Existem várias formas de codificar a gravação e a leitura de parâmetros. Neste artigo, apresentarei quatro delas. Para que o artigo não fique extenso demais, utilizarei apenas dois parâmetros nos exemplos abaixo, referente ao formato de exportação de um relatório (texto) e o número máximo de parcelas que o valor total de uma venda pode ser desdobrada (número inteiro).

1) Arquivos INI

Os arquivos INI são largamente utilizados para essa finalidade. Através de seções, chaves e valores, é possível gravar e ler parâmetros facilmente, já que o Delphi traz uma biblioteca exclusiva para a manipulação destes arquivos. Para gravar os valores, faça uso dos comandos a seguir:

Após a execução dos comandos acima, o arquivo será criado na seguinte estrutura:

Para ler estes valores, os comandos são bem parecidos:

2) Arquivos XML

A segunda alternativa é gravar as configurações em formato XML. Para isso, é necessário utilizar o componente TClientDataSet, que traz o comando SaveToFile para exportar os dados. A minha sugestão é criar uma tabela temporária com os campos referentes aos parâmetros e preenchê-la em tempo de execução.

Para exportar os valores, é simples. Em primeiro lugar, é preciso verificar se os valores estão sendo adicionados ou alterados através da contagem de registros. Em seguida, preenchemos os campos, mesclamos as alterações e salvamos o arquivo:

Quando for necessário ler os valores salvos, basta apenas carregar o arquivo:

3) Registro do Windows

As duas alternativas acima apresentam um problema: ambas criam um arquivo físico, passível de ser alterado por um editor de texto (como o bloco de notas) ou, no pior dos casos, excluído do computador. Neste caso, como o software depende da leitura destes parâmetros, o seu funcionamento pode ficar comprometido. Como solução, pode-se gravar essas configurações no registro do Windows, que consiste em uma área do sistema operacional exclusiva para o armazenamento de configurações dos aplicativos instalados.

A gravação dos valores pode ser feita da seguinte forma:

Por sua vez, assim como acontece com os arquivos INI, a leitura é bem semelhante com a gravação:

4) Banco de dados

Por fim, nada impede que os parâmetros do sistema sejam gravados em uma tabela no banco de dados com um nome condizente, como PARAMETROS ou CONFIGURACOES. A tabela poderá ser criada basicamente com apenas três colunas: Codigo (para fins de indexação), NomeParametro e Valor. Para cada parâmetro existente no sistema, um registro é adicionado nessa tabela.

Considerando que os registros já existam (por meio de uma instrução INSERT), os valores podem ser alterados através de uma Query preenchida com um comando UPDATE:

Para ler os valores, portanto, é necessário usar o SELECT em uma instrução SQL:

 

E qual é a melhor forma?
Fica a seu critério, caro amigo!

Até a próxima! Abraço!

 

André Celestino