Arquitetura de software, qual é a importância ?
Quem já ouviu falar de arquitetura de software, os nome MVC, N-Tier e MVVM não são nada desconhecidos. No entanto, há quem tenha dificuldades em desenhar um software usando camadas(sim, todos estes padrões de projeto que eu falei são padrões por camadas).
O objetivo deste artigo é explicar-vos a minha experiência com arquitetura de software e as dificuldades que eu tive, antes de perceber para que servia.
No início, eu escrevia código corrido. Escrevia tudo às cambalhotas e as pessoas que trabalharam comigo(universidade) não entendiam o meu código. Estavam sempre com aquelas perguntas:
"André, o que faz a linha 3 ?";
"Não percebo o que isto faz. Não te consigo ajudar".
No entanto havia outro problema. Os meus colegas que trabalharam comigo também entendiam pouco de arquitetura de software e baseavam-se em código da Internet. Sim, o código funcionava, mas está bem estruturado ? Está de forma a que o outro consiga ler ? Os professores, graças a Deus, que avaliam a qualidade de código. Uma pessoa que sabe fazer refactoring de código é uma pessoa que depois na apresentação do software ao professor ou à equipa, vai saber explicar o código.
Como começar a entender arquitetura de software?
A primeira coisa que acho que todos têm de entender é algoritmia. Sem isso, nunca na vida vão conseguir refatorar um código. Quando eu ouço falar de código limpo, a primeira coisa que devemos pensar é olhar para o nosso código e perceber o que eu posso por numa função. Isto é o básico da algoritmia. Quando vocês aprendem algoritmia aprendem que procedimentos e funções servem para modular o código de forma a que consiga-se se ler melhor. Depois há aquelas modas do DRY, do Clean Code. Sim, é tudo muito bonito, mas sem entender o que significa o que está por trás dessas normas não adianta aplicar Clean Code ou DRY. Dessas normas o que está por trás é conceitos básicos que todos os programadores devem saber e que são coisas óbvias. Por exemplo, escrever variaveis que todos possam entender.
Um exemplo em Javascript:
Este código é simples e toda a gente sabe o quê que isto faz. Agora imaginem, um projeto com 3000 linhas de código com nomes de variaveis assim. A primeira pergunta que vocês fazem a quem criou o código é esta:
"O que é o h ?"
Agora isto que está aqui já se percebe melhor:
O h afinal era uma saudação. Isto não vos é óbvio e básico ?
Ao vocês entenderem isto, vocês não precisam sequer de entender o que é o Clean Code, o que é o DRY. Não entendam isto mal. Não sou contra o DRY e o Clean Code. São princípios que são bons para toda a gente, no entanto o que eles falam são coisas que são muito óbvias.
Arquitetura de Software, muita gente associa à Object Oriented Programming. Mas não é só isso. Podem aplicar em qualquer linguagem de programação até mesmo o C só que talvez ia demorar um pouco mais de tempo a fazer.
Que arquitura de software devo usar ? Existe alguma melhor ?
Esta pergunta não tem uma resposta correta. É algo que passa por uma decisão de equipa de desenvolvimento. Se vamos usar N-tier, se vamos usar MVC, MVVM, Clean Architecture, Hexagonal Architecture isso é tudo uma decisão que a equipa de desenvolvimento deve avaliar. Primeiro é preciso ver se a equipa tem tempo para desenvolver. Se a equipa tem tempo para desenvolver, então talvez seja uma boa decisão usar uma Clean Architecture. A vantagem deste design pattern é que dá para trocar por exemplo uma base de dados por outra sem quebrar o funcionamento da aplicação.
Uma coisa que é importante perceber é que muita gente diz que usar uma estrutura de pastas qualquer já é um determinado padrão. Não necessariamente.
Eu posso chamar models, à minha pasta domain. Isso não quer dizer que deixe de ser Clean Architecture ou NTier ou MVC.
Refactoring de código
"Isto não funciona com o Hapi. Que estranho".
Vantagem da arquitetura de software
A vantagem de uma boa arquitetura é reduzir os custos de desenvolvimento e dificuldade de manutenção.
Conclusão
Para concluir, é preciso ver a questão do tempo que se tem para desenvolver o software. Se não há tempo, então usa-se uma arquitetura mais simples. Se tivermos podemos nos aventurar um pouco numa arquitetura que o custo de manutenção é mais barata no entanto se não há tempo, o projeto tem de ser desenvolvido.