Introdução
A arquitetura de um sistema de software é a organização ou a estrutura dos componentes significantes do sistema que
interagem através das interfaces, com os componentes compostos de componentes sucessivamente menores e de interfaces.
Sem uma fundamentação arquitetural, um sistema evoluirá de forma ineficiente e casual. Tais sistemas normalmente são
difíceis de estender, reutilizar ou integrar sem que exista um substancial retrabalho. Também é difícil organizar a
equipe ou comunicar idéias sem o foco técnico comum que a arquitetura fornece.
Foque na arquitetura, o mais cedo possível, para reduzir o risco e organizar o desenvolvimento.
Práticas
Crie a arquitetura para o que você conhece hoje
Como Albert Einstein disse, simplifique, mas não seja simplista. Projetos de software carecem de recursos e o desejo
dos desenvolvedores de criar soluções elegantes pode tornar um sistema muito mais complexo do que os Analistas de
Negócios solicitaram. Gastar energia num sistema à prova de requisitos futuros, num ambiente incerto ou turbulento,
provavelmente deixará o código inchado, o que eleva o custo total com poucos benefícios reais.
Crie arquiteturas que atendam às necessidades reais dos Analistas de Negócios e forneça flexibilidade e velocidade
apropriadas aos requisitos da forma como eles são conhecidos atualmente. Evite o desejo, mesmo que seja bem
intencionado, de especular sobre futuros requisitos e assim superdimensionar a arquitetura. Existe uma diferença entre
uma arquitetura superdimensionada e a construção de uma arquitetura que seja flexível e extensível. Por exemplo, pode
não existir uma razão aparente para criar três camadas arquiteturais em um sistema, mas é provável que o sistema vá
crescer de forma imprevisível, então devemos construir a arquitetura para isso.
Faça da arquitetura uma ferramenta de colaboração
A falta de um entendimento comum pelos desenvolvedores sobre um sistema causa indecisões e conflito de opiniões entre
eles e pode rapidamente paralisar o projeto. Os desenvolvedores podem ter diferentes modelos mentais do sistema e
trabalhar com propósitos difusos.
Crie e evolua a arquitetura do sistema com a intenção de usá-la no alinhamento dos modelos mentais concorrentes dos
desenvolvedores sobre o sistema. Uma boa arquitetura facilita a colaboração ao fornecer um vocabulário comum para todas
as discussões inerentes ao desenvolvimento do sistema.
Enfrente a complexidade elevando o nível de abstração
Construir software é complexo e a capacidade das pessoas para enfrentar a complexidade é limitada. Conforme o sistema
cresce, fica mais difícil para a equipe desenvolver um entendimento comum do sistema, porque é difícil enxergá-lo em
sua totalidade.
Utilize modelos para elevar o nível de abstração e focar nas decisões de maior importância, tais como nos
relacionamentos e padrões, ao invés de se atolar em detalhes. Modelos elevam o nível de abstração e permitem que o
sistema seja mais facilmente entendido através de diferentes perspectivas.
Organize a arquitetura com componentes de baixo acoplamento e alta coesão
Alto acoplamento entre os componentes torna um sistema frágil e de difícil entendimento. Criar um software é caro;
então, se os componentes existentes puderem ser reutilizados, isto pode reduzir o esforço exigido para criá-lo.
Organize a arquitetura do sistema em componentes que maximizem a coesão e minimizem o acoplamento. Isso melhorará a
compreensão, elevará a flexibilidade e aumentará as oportunidades de reuso.
Reutilize recursos existentes
Não desperdice recursos construindo algo que você pode simplesmente reutilizar ou mesmo comprar.
Esforce-se em reutilizar os recursos que já existem. Desenvolvedores normalmente relutam em reutilizar algum recurso
porque eles não atendem exatamente as suas necessidades ou são de baixa qualidade. Esteja preparado para tirar proveito
da economia que você pode fazer usando os recursos existentes, mesmo que eles necessitem que você faça uma acomodação
na arquitetura ou relaxe alguma restrição.
|