Code Smell: Utilização errada de ferramentas para abstração de acesso a banco
Já dizia o Tio Ben para o Peter Parker em Homem Aranha: “grandes poderes trazem grandes responsabilidades.”
A utilização de frameworks de persistência e queries compiladas geralmente traz diversos benefícios ao desenvolvimento, tais como a compilação em si das queries, como o próprio nome diz, e a abstração do modelo físico, por exemplo. Por outro lado, se estas ferramentas forem utilizadas sem a devida atenção, várias dores de cabeça.
Obviamente, o problema não se restringe à utilização destes frameworks, mas ela pode potencializar a desatenção sobre estas situações, por muitas vezes serem encarados como “balas de prata” que resolvem todos os problemas de comunicação com os bancos de dados.
Quando esta situação pode ocorrer?
Utilização de operações de alto “custo” que levam tempo considerável de processamento dentro de alguma estrutura de repetição, conforme exemplo abaixo:
public void LogicaDeNegocioXYZ()
{
foreach (Entidade entidade in listaEntidades)
{
//Faz alguma coisa
PopularFilho(entidade);
//Faz mais alguma coisa
}
}
public void PopularFilho(Entidade entidade)
{
//Faz alguma operação que vai ao banco ou qualquer operação pesada
}
Essa situação deve ser sempre evitada. Este equívoco citado no exemplo é facilmente cometido por programadores mais inexperientes, principalmente quando são utilizadas estruturas orientadas a objetos, como o framework Agilis ou Entity FW na Microsoft, por exemplo, conforme citado na introdução deste artigo.
Um caso típico são telas de consulta / filtro, onde é necessário retornar para um grid uma lista de colunas, sendo elas distribuídas em mais de uma entidade / tabela.
Exemplo:
Imaginem um exemplo hipotético das entidades NotaFiscal, ItemNotaFiscal e Produto.
Uma NotaFiscal tem uma lista de ItemNotaFiscal. Cada ItemNotaFiscal tem um membro Produto.
Imaginem uma “nota fiscal” ou cupom fiscal de uma padaria, onde você pede uma coxinha e um refrigerante. Neste caso, há uma nota fiscal, dois itens, sendo que cada item aponta para um produto (coxinha ou refrigerante).
Se é construído um grid para exibição dos itens da nota fiscal, e no caso de uso é necessário exibir o nome do produto, a situação citada acima pode ocorrer.
Se a tela exibe apenas os itens de UMA nota fiscal, este problema nunca será percebido, visto que a quantidade de itens é finita e pequena.
No entanto, se estivéssemos lidando com uma empresa maior que uma padaria e tivesse milhares ou milhões de produtos (uma montadora ou oficina industrial, por exemplo) e a tela tivesse um filtro por período e itens cujo valor é maior que X, esta situação poderia ocorrer e a tela ficaria lenta.
O que deve ser feito para resolver o problema?
Nestas situações é muito importante utilizar recursos de “eager loading” ou algum tipo de estrutura de cache para a entidade filha (desde que isto seja viável e a estrutura filha tenha um número grande de repetições e o cache faça sentido).
Estejam atentos a este tipo de situação!
Como mencionado na introdução, a utilização de ferramentas e frameworks de desenvolvimento geralmente traz muitos benefícios mas sua utilização deve ser acompanhada por desenvolvedores experientes!
Referências:
http://www.entityframeworktutorial.net/eager-loading-in-entity-framework.aspx
https://github.com/ccapndave/flextrine/wiki/Eager-and-lazy-loading
Por: Vinicius Paiva e Jéssica Saliba
Desenvolvimento de Software
Confira outros artigos
![](/_next/image?url=https%3A%2F%2Fwww.cms.dtidigital.com.br%2Fwp-content%2Fuploads%2F2024%2F07%2Fmecanismos-de-acompanhamento.webp&w=1024&q=75)
Mecanismos de Acompanhamento no Desenvolvimento de Software
O uso de mecanismos de acompanhamento é imprescindível no mundo do desenvolvimento de software e pode potencializar a eficiência digital. O acompanhamento efetivo das operações é fundamental para garantir a entrega de soluções digitais de sucesso. Na nossa empresa, utilizamos uma metodologia única, o dti evolve, que incorpora inteligência artificial (IA) para acelerar nosso processo de […]
Desenvolvimento de Software
![Fundo de código com celular apresentando eficiência digital com copilot](/_next/image?url=https%3A%2F%2Fwww.cms.dtidigital.com.br%2Fwp-content%2Fuploads%2F2024%2F07%2FGitHub-copilot-eficiencia-dti.webp&w=1024&q=75)
Eficiência digital com copilot: um caso de uso do GitHub
Em um mundo em constante evolução tecnológica, otimizar o tempo e potencializar a eficiência digital se torna cada vez mais crucial. Portanto, vamos apresentar alguns experimentos que estão sendo implementados com o Git Hub Copilot em busca de maior eficiência digital. Certamente quem nos acompanha sabe que estamos experimentando e introduzindo as melhores ferramentas de […]
Desenvolvimento de Software
![Engenharia de Prompt - Como conversar com Ia](/_next/image?url=https%3A%2F%2Fwww.cms.dtidigital.com.br%2Fwp-content%2Fuploads%2F2024%2F07%2FShutterstock_2422157137-1.png&w=1024&q=75)
Engenharia de Prompt: A Arte de Conversar com a IA
Sumário1 Falando a Linguagem das Máquinas2 O que é Engenharia de Prompt?3 A Importância da Engenharia de Prompt em Ação: Aplicações do Mundo Real 4 Princípios-chave da Engenharia de Prompt Eficaz4.1 Desconstruindo o Prompt:4.2 Técnicas de Engenharia de Prompt:4.3 Combinando Técnicas e Criando sua Obra-Prima:5 As Armadilhas da Engenharia de Prompt: Navegando pelos Limites dos Modelos […]
Desenvolvimento de Software