quinta-feira, 25 de agosto de 2011

Kb´s Grandes


Um tema fundamental levantado pelo Enrique Almeida para o próximo Encontro Genexus é a gestão de Kbs grandes no Genexus, e creio esse ser sem dúvida um dos assuntos mais importantes relacionados ao desenvolvimento com Genexus, pelo menos pra mim.

Falo isso porque nosso projeto alcançou uma dimensão exageradamente grande, gerando situações difíceis de serem resolvidas, algumas das quais já adianto no Genexando, para que possamos gerar reflexões no encontro:

  1. Tempo de compilação, backup da Kb
    1. Apesar dos avanços alcançados na questão da otimização do processo de compilação e geração de código, temos ainda grandes dificuldades no que se refere ao tempo gasto em um Build All.
    1. O tempo para a exportação completa de nossa KB é de 15 minutos.
    1. Geração de objetos desnecessários também vem nos causando grandes transtornos, atualmente temos 70 objetos que insistem em serem gerados mesmo que não se tenha nenhuma nova implementação sobre eles.
    2.  Infelizmente o Genexus também se torna lento e ineficaz, e olha que usamos um belo Intel Centrino QuadCore.
  1. Processos fundamentais centralizados e protegidos
    1. Infelizmente Genexus não possui ainda uma linguagem Orientada a Objetos, desta forma conceitos fundamental como classes, objetos, métodos private  e public, interfaces, sobrecarga, e outros, fazem muita falta.
    1. Uma vez que não possui os conceitos de objetos e classes, as regras de negócio ficam implementadas de forma esparsa dentro nos objetos Genexus: Transações, Procedimentos, Web Panels, cada um tratando de parte da regra, e claro, gerando grandes dificuldades para mantê-las integras de acordo com a evolução do projeto.
    1. Por exemplo, ao se realizar a manutenção em determinada regra de negócio em um Procedimento isolado, por exemplo, pode ocorrer que esta mesma manutenção não venha a ser aplicada em outros objetos similares, tornando esses geradores de bugs na aplicação. Se tivéssemos a possibilidade de criar uma Classe (de negócio) poderíamos concentrar todas as operações em um lugar único, disponibilizando os métodos públicos disponíveis para serem consumidos pelos objetos Genexus, tais como Transações, WebPanels, Procedures, e outros.  Uma manutenção em uma única classe traria muitos benefícios para projetos grandes e complexos.
    1. Atualmente diversos objetos apontam nessa direção, o External Object, por exemplo, permite encapsular métodos de classes externas ao Gx. Quem sabe não teríamos uma espécie de Internal Object, similar ao External Object, que disponibilizaria um tipo para se acessar métodos de negócio públicos encapsulados e protegidos na Kb.  Claro que nem todos os desenvolvedores teriam privilégios para manipular tais objetos.

  1. Todos tem acesso a tudo
    1. Independentemente da atuação da pessoa no projeto, quer seja um aprendiz, um desenvolvedor, um analista senior, qualquer um, possui acesso full a todos os objetos da KB. Esse acesso indiscriminado gera situações complicadoras, desde a modificação e remoção indevida de objetos, até mesmo questões de segurança do projeto, visto que a pessoa pode, por exemplo, obter uma cópia integral do código fonte, para quem sabe fazer o que.  Melhor seria se fosse possível estabelecer privilégios sobre os objetos para os diversos perfis de desenvolvedor, bloqueando inclusive operações de modificação, exportação, abertura, entre outras.
    1. Todos podem modificar a estrutura das transações, podendo gerar inconsistências na base de dados, duplicação de atributos e conceitos, e por ai vai.  Melhor seria se tivéssemos perfis para liberar modelagens da estrutura do sistema

Tem muitas outras coisinhas interessantes a serem discutidas, mas vou parar por aqui para não assustar as criancinhas!