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!
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.
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.
- Java Record vs. Lombok: https://www.baeldung.com/java-record-vs-lombok
Eu acho que vale a pena tentar jogar no modo hard que no caso é escrever mais código autoral e menos thirdPartCodes.
Focar no negócio também pode ser uma boa opção. Existem muitos empreendedores de sucesso.
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.
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.
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.