Uso do SOLID no frontend é tão importante quanto no backend?
Fala, galera!
Me chamo Ismael e é a primeira vez que posto algo por aqui. Sou desenvolvedor júnior então desde já peço que relevem minha leiguice xD
Atualmente trabalho em um aplicativo que é desenvolvido em Ionic com Angular. Há alguns dias decidi subir a versão do projeto por conta de diversos problemas que estava enfrentando para buildar o projeto ou gerar o apk no Android Studio.
Consegui atualizar o Ionic da versão 4 para a versão 5, o Angular do 7 para o 10, e Capacitor do 2 para o 4. Com isso, precisei desinstalar um pacote de leitor de QR Code porque ele estava descontinuado e precisei instalar um pacote mais recente.
Não sei se é certo dizer mas percebi o quanto o pacote anterior estava acoplado com o componente. Quando mudei para o novo pacote, precisei mudar todo o código que existia no componente porque eu não havia criado um serviço para abstrair o pacote antigo.
Como tenho estudado mais sobre criação de APIs e a importância do SOLID, decidi implementar o novo pacote de leitura de QR Code com o principio que foi mais fácil de entender, o LSP (Princípio da Substituição de Liskov). Então estava eu criando um serviço que implementava uma interface para que o componente que usa o serviço utilizasse a interface e não a implementação de fato, que é o serviço, para que se um dia precisasse mudar novamente o pacote, não precisasse alterar de novo a lógica do componente.
Mas daí percebi que em todo projeto, e principalmente em outros projetos Angular que tive a oportunidade de trabalhar, os componentes utilizavam diretamente o serviço e não uma interface para injetar um serviço.
Daí me surgiu uma dúvida: por que no Angular, e talvez no front-end em geral, não se aplica o SOLID como no back-end? Em outras palavras, por que não é costume que os serviços sejam injetados utilizando interfaces em vez de os serviços diretamente no componente?
Por que não se usa algo como:
constructor(@Inject(FirebaseAuthService) private authService: AuthServiceInterface) {}
Em vez de:
constructor(private authService: FirebaseAuthService) {}
como eu tenho visto em alguns projetos Angular? E se o normal for a segunda forma, por que o Angular não usa o LSP para injeção de serviços? Se é que é correto dizer que ele não usa.
Segundo o Chat GPT "para maior flexibilidade e previsibilidade, você pode usar interfaces, mas, no front-end, especialmente no Angular, a necessidade de aderir rigidamente ao LSP pode ser mais flexível e adaptada ao seu contexto", o que me deixa com mais uma dúvida: o uso do SOLID no front-end é mais flexível? Se sim, por quê?