domingo, 9 de março de 2014

Business Component ou Atualização Direta, eis a questão

Aqui no Blog sou um defensor do uso de Business Component (BC) ao invés da realização da manutenção de registros por meio de Procedures, pois são muitas as vantagens que esse recurso nos oferece, mas como nem tudo nesta vida é um mar de rosas, tomemos alguns cuidados em sua aplicação. Se você ainda não foi apresentado aos BC's, convém dar uma olhada nos artigos anteriores sobre este assunto:
  1. Genexando...: Business Component com Transação de Dois Níveis
  2. Genexando...: Cuidados Básicos com Business Component

Desempenho x Segurança

Esta é a principal questão a ser considerada neste recurso pois ao optarmos por utilizar BC's não temos que nos preocupar com regras de negócio na manutenção dos registros, uma vez que serão aplicadas as que foram programadas na própria transação.  Isso trará maior segurança na operação dos dados, pois os mesmos serão tratados pelo modelo da transação Genexus, que envolve diversos controles como a Integridade Referencial, Unicidade, Regras, tornando muito mais simples e eficiente a programação de novas interfaces.

Por exemplo, uma vez alterada a regra na transação o efeito será imediato, repercutindo em todas as demais interfaces do sistema que utilizam o BC, ou seja o impacto de manutenção do sistema seria mínimo. Talvez este efeito já seja justificativa suficiente para adotarmos BC's. Portanto é um recurso importante a ser considerado em seus projetos.

Como grande inconveniente dos BC's temos o desempenho, que pode degradar muito o projeto dependendo de onde o mesmo é aplicado.  Isso porque o efeito de um LOAD é o mesmo que abrir o registro na própria Transação com o disparo das regras standalone (Default, Noaccept, ...) que por ventura não foram incluídas dentro da cláusula [web]{...}, já discutida aqui no segundo artigo da lista apresentada anteriormente. Como resultado temos uma perda imensa de tempo para realizar coisas que talvez já estejam definidas.

Como se Beneficiar dos BC's

Para simplificar sua vida, proponho a seguir uma tabela com diversas situações que talvez possam te auxiliar na escolha do recurso ideal:

SituaçãoBCProcedures
O registro ao ser inserido deve passar por um filtro de regras que impeçam que o mesmo seja gravado de forma erradasimnão
O registro ao ser atualizado deve passar pelo mesmo filtro de regrassimnão
O registro ao ser apagado pode gerar problemas de Integridade Referencialsimnão
A interface criada protege as informações, de certa forma, permitindo que o usuário faça apenas ajustes em situações totalmente controladas, como por exemplo, permite-se a troca de certo status através de um controle combo cujos valores são sempre válidos.simnão
A interface é do tipo Formulário de entrada e saída, apresentando apenas um único registro a ser manipulado.simnão
A interface é do tipo GRID apresentando diversos registros da tabela, possibilitando que o usuário realize alterações de informações, porém com registros individuais. Por exemplo, cada linha possui um botão para salvar as alterações da linha.sim (*)sim
A interface é do tipo GRID apresentando diversos registros da tabela, possibilitando a manutenção dos dados em todas as linhas ou apenas das que foram selecionadas pelo usuário (através de um checkbox, por exemplo)nãosim

(*) mesmo nesta situação podemos ter perda de desempenho.

Teríamos muitas outras situações a serem tratadas, mas fiquemos com essas por enquanto, pois já são suficientes para chegarmos a uma boa conclusão que é:

Se você está manipulando um único registro opte sempre por BC, pois o resultado trará maior segurança e normalmente nesta situação o problema de desempenho está mais no operador do sistema do que no próprio sistema.  Por outro lado, se a operação envolve mais que um registro, cuidado, BC pode trazer lentidão ao processo, pois os controles e regras da transação seriam disparados em todos os registros.

Recentemente tive que reprogramar uma interface do tipo GRID, regredindo ao modelo da programação de Procedures, pois a lentidão impedia uma boa utilização.  Portanto, fica ai a dica, uma boa observação do resultado final pode te orientar, no futuro, sobre as melhores práticas a serem adotadas em cada caso em seu projeto.