Executando verificação de segurança...
7

Utilização de libs em Java

Recentemente, me deparei com um grande dilema em um projeto real em Java utilizando Spring Boot. Nesse projeto, estou utilizando algumas bibliotecas para facilitar o trabalho. Sou muito amador no desenvolvimento de aplicações web e, assistindo a alguns vídeos e lendo opiniões de outras pessoas, me deparei com a questão de utilizar ou não essas bibliotecas.

Para vocês entenderem, um exemplo é que, nesses projetos, estou utilizando Lombok para reduzir o boilerplate e melhorar a legibilidade. Porém, discutindo com algumas pessoas e vendo opiniões na internet, percebi que algumas são fortemente a favor da utilização, enquanto outras relatam que precisaram removê-la do projeto.

Entendo que a utilização dessas bibliotecas aumenta a dependência, o que pode ser muito negativo, pois, futuramente, elas podem deixar de ter suporte ou serem descontinuadas.

Outro ponto é que, nesse projeto, estou criando conversores de entidades manuais para transformar os DTOs, e estava pensando em utilizar a biblioteca MapStruct para realizar o mapeamento. Porém, isso significaria adicionar outra dependência ao projeto kkkkk.

Compreendo que, para algumas arquiteturas, é melhor evitar o uso de bibliotecas externas para reduzir dependências. No entanto, não consigo formar uma perspectiva clara quanto a isso.

Preciso de opiniões para ter uma visão melhor sobre o uso de bibliotecas: quando utilizá-las e quando não. Se puderem me ajudar, agradeço imensamente!

Carregando publicação patrocinada...
2

Em uma aplicação web java, utilizando spring boot, vc já começa com algumas dependências diretas e várias de dependências indiretas (as dependências das dependências). Logo, a decisão de adicionar ou remover uma dependência estaria mais relacionado em ponderar os prós e contras.

Por exemplo, se vc está começando um novo projeto numa versão recente do java e gostaria de usar o lombok no contexto de 'data classes', talvez seja interessante optar pela feature de records (nativa do java) para evitar tal dependência.

1

Entendo perfeitamente, normalmente tenho o costume de usar o tipo Record para a criação dos DTO's da aplicação mas vou tentar ver como posso expandir isso para a utilização em mais contextos e tentar minimizar as dependências, avaliando os casos. Valeu pela orientação :)

2

Pra variar, a resposta é "depende". Não existe fórmula mágica, tem que ser avaliado caso a caso.

Por exemplo, se for algo muito complexo, que vai demorar um tempão e ainda tem chance de não ficar bom, provavelmente é melhor usar uma lib pronta. Geralmente isso vale para coisas que são reconhecidamente complicadas, como criptografia, engines gráficas, operações matemáticas avançadas, etc. Ou qualquer outra coisa que não seja do seu domínio e a chance de fazer errado é enorme.

Da mesma forma que, se for algo bem simples ou que demanda poucas horas, talvez valha a pena vc mesmo fazer. Ou pode ser que a lib seja gigante (trocentos megabytes) mas vc só precisa de um único método dela, aí talvez seja o caso de copiar para o seu projeto somente o código fonte daquele trechinho.

E tem vezes que o prazo está apertado e usar o que já está pronto pode economizar tempo, mesmo que seja algo que vc conseguiria fazer sozinho. Ou o oposto, ainda tem tempo (raro, mas acontece) e dá pra arriscar não usar a lib.

Tem também aquelas que podem te trazer mais produtividade e ganhar tempo no médio e/ou longo prazo, e aí pode valer a pena. Mas é algo que vc só vai saber usando, testando e avaliando periodicamente.


Enfim, dependências sempre vão existir. Só de escolher um framework, por exemplo, vc já se torna refém dependente dele. Tem que avaliar se os benefícios que as dependências te dão superam os problemas que vêm junto (afinal, todas têm vantagens e desvantagens, tem que pesar os prós e contras sempre).

E é difícil achar o ponto de equilíbrio, tem vezes que vc pensa "ah, já tem 148 dependências, adicionar mais uma não fará mal". Aí ela entra em conflito com outra já existente e quebra seu código. Ou o contrário, "148 é muito, vou refazer umas partes na mão", mas agora tem o risco de perder tempo demais refazendo tudo e no fim ainda fica pior, porque na verdade o negócio era bem mais complicado do que vc pensava - e aí vc entende porque escolheram usar a lib :-)

De qualquer forma, uma avaliação mínima (junto com testes decentes) deve ser feita, até para evitar casos como o infame incidente do left-pad (não é Java, mas a lição que fica vale para todas as linguagens).

E no fim a melhor forma de saber se vale a pena ou não é usando e avaliando. A quantidade em si não deveria ser o único critério, pois se foi avaliado que todas as 148 dependências são realmente necessárias e trazem mais benefícios que problemas, então 148 não é muito e tudo bem mantê-las. Assim como se tiver apenas duas dependências, mas elas são desnecessárias porque dava pra resolver de um jeito mais simples sem elas, então dois é muito e é melhor removê-las.

2

Po cara, valeu pela explicação, vou levar em consideração esses pontos que você citou e avaliar se vai ser realmente necessário colocando em consideração os prós e contras que vocês citou. Já foi de grande ajuda pois não tinha nem noção de algumas situações que você colocou ai.

No projeto aqui agora decidi usar mesmo para fazer o mapeamento pois estava demorando muito fazer as coisas manualmente e tenho um prazo bem apertado. Vou levar em consideração essas coisas que você citou nas próximas vezes que tiver uma situação parecida. No mais, vivendo e aprendendo, vou utilizar nesse por ser uma entrega pequena e ir avaliando. Se der algum problema faço na mão mesmo já que não vai ter um impacto tão grande hahaha...

1

Realmente depende. Mas sou adepto ao se concentrar e usar meu tempo o maximo possivel a solucionar problemas de negocios. se as libs forem pra ter mais tempo no problema de negocio eu uso. Mas ai depende muito dos requisitos do seu projeto.

1

Sou muito amador no desenvolvimento de aplicações web

Se você é iniciante e está com essas dúvidas significa que não tem ninguem na sua equipe com mais conhecimento, tomando essa teoria como afirmação:

  • Use as libs que você achar necessário, desde que saiba como elas funcionam e saiba viver sem elas.
  • A opinião dos outros vale para o projeto deles, não necessariamente a sua necessidade vai ser a mesma necessidade deles.
1

Sim, sou amador mas antes de tudo estou buscando entender como funciona e como faria aquilo de maneira manual. É claro que existem algumas coisas que eu realmente não consigo entender, mas vou progredindo aos poucos :); Valeu pelo feedback, vou levar em consideração essa ideia tentando sempre avaliar se realmente é preciso de acordo com a necessidade do projeto.

1

Tmpo de desenvolvimento e sobre atrapalhar na escalabilidade técnica são questões importantes.
A longo prazo projetos com muitas dependencias são mais difíceis de manter.

1

Realmente, tenho essa mesma ideia porém, acredito que tenha que avaliar a situação. Imagino que numa situação real, principalmente como a minha com um curto prazo não tem como chegar num ideal de não ter nenhuma dependência no projeto, pricipalmente no que diz respeito ao core da aplicação.

Vou buscar sempre avaliar a situação e tentar ter uma perspectiva a longo prazo. Valeu pelo feedback :).

1
1

Acredito que você esteja falando do meu comentário sobre as regras de negócio:

... em algumas situações acredito que o foco deveria fica mais nas regras de negócio...

Aqui estou me referindo as regras que a empresa que está me contratando impõe para a execução do software. Um exemplo seria um imposto que deve ser calculado no momento de lançar alguma despesa no caixa.

Espero ter ajudado...

1
1

Então para algumas coisas eu penso da mesma forma kkkkkkkkk... Na faculdade sempre tenho que ser autoral em basicamente tudo. Porém, em algumas situações acredito que o foco deveria fica mais nas regras de negócio. Por isso fico com essa questão: Até que ponto começa a ser uma perda de tempo? E o quanto isso atrapalha no crescimento da aplicação.