Metas de arquiteturas
Já participei de entrevistas de emprego nas quais onde me foi perguntado se eu conhecia design patterns e com quais eu já havia trabalhado. O conceito por trás dessa pergunta é quanto mais design patterns eu já trabalhei, mais pontos eu ganho. Ou seja, o critério é quantidade, não houvendo em nenhum momento nenhuma dúvida com relação à qualidade.
Paralelamente a isso existem também duas práticas conhecidas como KISS (Keep It Sweet & Simple) e YAGNI (You Ain’t Gonna Need It). A primeira consiste em fazer as coisas mais simples, sem complicações desnecessárias.
Mas lembre, não devemos confundir simples com simplista. Simples consiste em evitar ornamentos dispensáveis, enquanto simplista consiste em considerar apenas um aspecto das coisas. O desejável é ter uma arquitetura simples, não simplista.
O outro conceito – YAGNI – sugere que o arquiteto não deve adicionar funcionalidades até que sejam necessárias. A tentação para escrever código que não é necessário no momento (mas que pode ser útil no futuro) tem muitas desvantagens: tempo perdido, aumento de bugs, código grande e complicado, entre outras.
Então fica a questão, como alguém pode saber o que adicionar em uma arquitetura? Como posso ter certeza que não estou sendo simplista? Como sei do que vou precisar ou não? A resposta a isso são as metas arquiteturais, que provêem motivação e análise racional para decisões. Estas são geralmente orientadas aos requisitos do software.
Questões respondidas pelas metas arquiteturais:
- Qual a expectativa de vida do sistema?
- O sistema deve responder a trocas tecnológicas ao longo da vida?
- Com que freqüência o sistema deve adaptar-se a mudanças?
- Quais mudanças podem ser antecipadas, e qual a maneira mais fácil de acomodá-las?
Após definidas as metas arquiteturais, o arquiteto tem capacidade de saber quais as melhores estratégias para a arquitetura, quais patterns são mais apropriados. Se não houver metas arquiteturais não é arquitetura de sistema, mas apenas descrição de sistema.