Escolar Documentos
Profissional Documentos
Cultura Documentos
Teoricamente, quem desenvolve sistemas com o Maker não precisa se preocupar com
linguagens de programação (exceto se precisar de funcionalidades das quais a
ferramenta não dispõe nativamente), Projeto Orientado a Objetos, Hibernate, CSS,
Tomcat, javascript … bom, javascript é bom conhecer sim!
Todavia, engana-se quem acha que o Maker faz milagres e que não é necessário saber
programar e aplicar com profissionalismo as técnicas da programação estruturada. Da
mesma forma, quem acha que pode desenvolver um bom sistema, mesmo que seja
pequeno, criando tabelas com o wizard do Maker (aquele que sugere a criação de
estruturas no banco quando se posiciona componentes numa tela sem campo associado),
pode enfrentar sérios problemas. Esta série de postagens, dividida em três partes, visa
discutir acerca das boas práticas que se devem adotar nos processos de modelagem de
bancos de dados, programação com fluxo e planejamento de telas, neste post daremos
ênfase em Bancos de Dados.
Dentre os diversos pontos que podem ser analisados com relação à modelagem do
banco de dados deve-se dedicar uma atenção especial no que diz respeito à
normalização. A aplicação correta dos conceitos de normalização evita redundâncias
nas tabelas, facilitando a manutenção e a integridade dos dados.
Entretanto, como contra exemplo, utilizar uma única tabela para armazenar os dados das
entidades citadas torna a tabela confusa e de difícil manutenção, pela dificuldade de se
reconhecer quais dados dizem respeito a qual entidade, uma vez que a quantidade de
campos sempre tende a crescer. Tarefas simples como listar os dados dos alunos pode-se
tornar um problema com uma estrutura de tabelas com tais problemas semânticos.
1
Tratando-se de sistemas que sofrem atualizações sob demanda, essas questões que
envolvem a estrutura do modelo de dados são ainda mais críticas, pois nem sempre é
possível analisar o modelo com tempo e condições adequadas, devido a pressões do
cliente, prazos curtos , urgências ocasionais ou simples desleixo do responsável pelo
BD. Por isto é necessário estar atento às questões de modelagem sempre que possível,
fazendo reestruturações e ajustes, para que o sistema não só funcione, mas que esteja
bem feito e seja de fácil entendimento. O fato de ser possível fazer alterações de forma
muito veloz nos sistemas desenvolvidos com o Maker acaba se tornando um fator
preocupante, visto que, as questões de projeto podem se tornar secundárias frente ao
ímpeto de resolver os pedidos dos clientes com agilidade.
Logicamente, a criação das views deve ser um processo bem elaborado, deve-se
identificar quais consultas são acessadas em mais de um ponto do sistema, e quais
consultas podem servir de base para a realização de outras. Aquelas que realizam
cálculos muito pesados devem ser evitadas para não sobrecarregar o banco e congelar os
recursos do BD. No caso de haver uma real necessidade de views complexas, é mister
elaborar mecanismos para otimizar rotinas, como transações de curta duração e
atualizações fragmentadas, que, nos termos do Maker, significa, usar “cliente chamando
servidor” (para realizar atualizações muito grandes que travariam o banco) de forma
fragmentada, usar a função Executar SQL sem transação, etc.
Para finalizar, não adianta reclamar do Maker sem tentar buscar formas de otimizar o
trabalho. Seja qual for a tecnologia, a organização da estrutura do projeto sempre vai
impactar de forma crítica a capacidade de mantê-lo e alterá-lo. Como foi dito no
começo do tópico, no caso do desenvolvimento ser em Maker, não é necessário se
apegar às linguagens, nem aprender diversas tecnologias, mas a qualidade do Banco de
Dados e a forma como o mesmo é utilizado é decisiva para o sucesso do projeto. Da
mesma forma, a aplicação de práticas conhecidas de programação no ‘fluxo’ e uma boa
prototipagem de telas possibilita ao desenvolvedor manter o sistema de forma mais
produtiva, mas estes serão temas de outras postagens, até lá.
2
Maker 2/3 – Programação com Fluxo
Este é a segunda parte de uma série de três postagens abordando o tema ‘Boas práticas
com o Maker’. Neste post será abordada uma série de práticas que podem ser aplicadas
à programação com fluxos com o objetivo de aumentar a produtividade do processo de
desenvolvimento com o Maker.
Uma boa prática de nomenclatura dos fluxos é utilizar o modelo ‘Módulo do Sistema’ –
‘Nome da Tela’ – ‘Objetivo do Fluxo’, por exemplo: ‘Vendas – Pedido de Venda –
Calcular Total’. Fazendo desta forma, evita-se criar fluxos com nomes repetidos ou
muito parecidos, que dificultem a identificação de sua funcionalidade, sendo necessário
abri-lo e analisá-lo para saber. Por exemplo, em um sistema comercial, podem existir
diversos fluxos chamados ‘Calcular Total’, de modo que se torna indispensável fazer
essa distinção pelo nome.
4
Figura 3 - Exemplo de fluxo para Mostrar/Esconder componentes feito de forma não reutilizável.
5
Figura 5 - Exemplo de fluxo para Mostrar/Esconder componentes feito de forma reutilizável e compacta.
A reutilização de fluxos pode-se dar ainda quando se tem um mesmo conjunto de fluxos
usado para manipular diversas telas com finalidades próximas e que manipulam os
mesmos componentes, fazendo-os, aparecer, desaparecer, efetuar cálculos etc. Por
exemplo, considerando um cadastro de pessoa num sistema de vendas, pode ser desejar
criar uma tela que só mostre clientes, outra só para fornecedores, outra para
transportadoras, etc. Todavia, todas estas telas deverão compartilhar a mesma
funcionalidade citada no parágrafo anterior, de exibir/ocultar componentes a depender
do tipo da pessoa, física ou jurídica. Desta forma, é útil garantir que os nomes dos
componentes sejam iguais nas telas que executam o mesmo fluxo, para que a
reutilização seja possível.
Ainda neste contexto, outro exemplo de fluxo útil para promover a reutilização é aquele
que retorna o código ou GUID do formulário corrente. Algumas funções precisam do
código do formulário para ser executadas, dentre elas as muito utilizadas: “Alterar Valor
do Componente“ e “Obter Valor do Componente”. Por isto, no caso de haver
necessidade do uso de tais funções em fluxos compartilhados por mais de um
formulário é possível criar um fluxo que obtenha o código do formulário corrente, ou
seja, o código do formulário a partir do qual o fluxo em execução foi chamado, com a
função ‘Obter ID do Formulário’, recebendo como único parâmetro o retorno da função
‘Obter Formulário Atual’, ambas disponíveis nativamente no Maker.
7
Grade: possui a propriedade Grade Mestre, que permite que a efetuação de
filtros entre grades em uma mesma tela.
Lista dinâmica: possui a propriedade ‘Formulário’, que permite definir um
formulário a ser chamado para edição dos registros referentes à consulta da lista.
Neste âmbito, uma boa dica é definir parâmetros para o seu sistema através de uma
tabela de parâmetros e obter os valores desejados utilizando a opção Consulta SQL na
definição de valores padrão, por exemplo, considere um sistema de vendas, onde por
padrão, deve-se dar 5% de desconto em todas as vendas. Se este valor é colocado de
forma constante no formulário e um dia o cliente desejar alterá-lo, será necessário
acessar o projeto no Maker, alterar o formulário, gerar .war ou exportar .frz, a depender
de como publicou o seu sistema (sobre este assunto veja este post) e por fim, atualizar
no cliente. Se, por outro lado, você criou no seu sistema uma tabela para armazenar
parâmetros, você poderia alterar este parâmetro em uma simples edição de registro,
ganhando tempo e facilitando a manutenção do seu sistema para estes casos.
Quando se está fazendo uma tela de consulta com filtro dinâmico preenchido pelo
usuário, quase sempre é necessário utilizar fluxo. Para esta tarefa, as funções: ‘Abrir
Consulta’ e ‘Grade – Preencher com Consulta’ podem ser aplicadas. Basta criar um
fluxo com estas duas funções, na primeira você faz sua consulta, recebendo os
parâmetros da tela, por exemplo, considere um sistema de loja onde você precisa criar
uma consulta para listar os pedidos efetuados por vendedor e por período de
vencimento. A figura abaixo mostra a tela e o fluxo que realiza a funcionalidade.
Cabe ressaltar aqui que, mesmo que a grade da figura acima seja populada pela função
‘Grade – Preencher com Consulta’, este componente ainda precisa de um formulário
associado, caso contrário, o componente grade não aparece na tela. A dica aqui é que
você crie este formulário com os mesmos campos que sua consulta irá retornar, porém,
sem registros, isso pode ser obtido com uma consulta com o limitador de registros ‘TOP
0’. Desta forma, quando o usuário clicar no botão que irá processar a consulta na grade,
não haverá uma mudança brusca das colunas que a compõem, tornando a
funcionalidade mais natural, visto que, os nomes dos componentes é que irão compor as
colunas da grade quando a tela abrir, e, quando a função ‘Grade – Preencher com
Consulta’ for chamada, são os aliases dos campos que irão compor as colunas (nesta
função também é possível definir manualmente os nomes das colunas, através do seu 4º
parâmetro).
Figura 2 – a) Exemplo de Consulta utilizando propriedades do componente grade. b) Exemplo de consulta utilizando lista dinâmica
e grade.
Se a consulta desejada for o simples retorno de uma view ou consulta SQL, o problema
se torna ainda mais fácil de resolver, pois basta criar um formulário sem navegação e
sem abas, apenas com um componente grade, e definir a consulta desejada no
formulário da grade, que deverá ser editável. A Figura abaixo mostra um exemplo de
consulta que exibe todos os usuários marcados como administradores no cadastro de
usuários padrão do webrun. Como o filtro é fixo, não é necessário fazer nada além de
definir a consulta na grade, e, ao clicar no botão atualizar, o operador pode obter
informações em tempo real. Note que nesta grade apenas o botão atualizar está
disponível, pois, trata-se de uma consulta apenas para visualização. (veja Definições do
Formulário aqui)
10
necessitar de apenas alguns campos, por exemplo, veja a consulta da Figura 3. São
exibidas apenas as colunas: Código, Login e Email do usuário. Esta grade está editável,
por isto, todos os campos que estiverem no formulário detalhe serão exibidos na ordem
da tabulação. Nos casos de grades não editáveis, como na Figura 2, escolhe-se as
colunas que se deseja exibir, porém, se um mesmo campo aparecer mais de uma vez no
mesmo formulário, como em cabeçalhos nas abas, ele vai se repetir na grade, o que não
é desejável. Por estes motivos, é que se deve sempre criar uma nova tela específica para
a grade, uma vez que, associar a mesma tela à qual se dá manutenção nos registros pode
provocar efeitos inconvenientes como repetição de colunas, ou colunas com
espaçamento muito grande, devido ao layout da tela base. Entre escolher o layout da tela
de manutenção e o layout da grade de consulta, escolha criar outra tela específica para a
consulta. Sobre isto, você pode dizer: “Mas eu gostaria que quando o usuário clicasse
duas vezes no registro, o formulário de cadastro abrisse para edição ou visualização”.
Isto pode ser feito via fluxo no evento Ao Duplo Clicar da grade, ou, uma solução mais
prática é adicionar um botão no formulário da grade chamando o formulário de
manutenção dos registros, passando a chave primária do mesmo como parâmetro, como
mostra a Figura 3.
Existem ainda situações onde é útil fazer uma consulta para fins de atualização de
registros, por exemplo, em um sistema de vendas, por conta de algum tipo de falha,
pode ser necessário consultar os pedidos que estão com data de vencimento entrega à
data de emissão, portanto, se faz necessário criar uma tela onde se visualize estes
registros e, na mesma tela, deve ser permitido corrigir estas datas. Para tal, use a mesma
solução citada no parágrafo anterior, mas, tornando os botões alterar e gravar
disponíveis e mude os campos que não se deseja alterar para somente leitura, como
mostra a Figura 4.
Exemplo de Consulta
com atualização de registros
11