Conceito: Focar na arquitetura, o mais cedo possível, para reduzir o risco e organizar o desenvolvimento.
Uma arquitetura evolutiva ajuda a equipe a tratar a complexidade, orientar a atenuação do risco e organizar o desenvolvimento.
Descrição Principal

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.

Informações Adicionais