Introdução
A arquitetura de software é um conceito fácil de compreender e que a maioria dos engenheiros conhece intuitivamente,
especialmente os que têm pouca experiência, mas é difícil de definir com precisão. Em particular, é difícil traçar uma
linha reta entre o design e a arquitetura - a arquitetura é um aspecto do design que se concentra em algumas
características específicas.
Em Uma Introdução à Arquitetura de Software, David Garlan e Mary Shaw sugerem que a arquitetura de software é um
nível de design preocupado com a seguinte questão: "Além dos algoritmos e das estruturas de dados de computação; o
design e a especificação da estrutura total do sistema emergem como um novo tipo de problema". As questões estruturais
incluem a organização básica e a estrutura global de controle; os protocolos para comunicação, a sincronização e o
acesso aos dados; a atribuição das funcionalidades aos elementos de design; a distribuição física; a composição de
elementos de design; a característica escalar e o desempenho; e a seleção entre as alternativas de design."
Todavia, existe mais na arquitetura do que apenas a estrutura; o "IEEE Working Group on Architecture" define-a
como "o conceito de mais alto nível de um sistema em seu ambiente". Abrange também o "adaptar-se" à integridade do
sistema, com restrições econômicas, com interesses estéticos, e com estilo. Não é limitada a um foco interno, mas leva
em consideração o sistema como um todo em seu ambiente de usuário e em seu ambiente de desenvolvimento - como um foco
externo.
Neste processo, a arquitetura de um sistema de software (em um dado ponto) é a organização ou a estrutura dos
componentes significativos do sistema que interagem através das interfaces, com os componentes compostos de componentes
sucessivamente menores e de interfaces.
Descrição da Arquitetura
Para falar e raciocinar sobre a arquitetura de software, você deve primeiramente definir uma representação
arquitetural, uma forma de descrever aspectos importantes de uma arquitetura. Esta descrição é capturada no Artifact: Caderno de Arquitetura.
Visões Arquiteturais
A arquitetura de software pode ser representada em visões arquiteturais múltiplas. Cada visão arquitetural representa
um determinado conjunto de interesses específico aos analistas de negócios no processo de desenvolvimento: usuários,
designers, gerentes, engenheiros de sistema, mantenedores, etc.
As visões capturam as principais decisões estruturais de design pela demonstração de como a arquitetura de software
está estruturada em componentes, e como os componentes são conectados para produzir formas úteis. Estas escolhas de
design devem estar relacionadas aos Requisitos funcionais e não-funcionais e a outras restrições. Mas estas escolhas,
por sua vez, adicionam mais restrições aos requisitos e as futuras decisões de design em um menor nível.
Foco Arquitetural
Embora as visões acima possam representar todo o design de um sistema, a arquitetura só se preocupa com alguns aspectos
específicos:
-
A estrutura do modelo: os padrões organizacionais, por exemplo, a Divisão em Camadas
-
Os elementos essenciais: casos de uso críticos, principais classes, mecanismos comuns, etc, ao contrário de
todos os elementos presentes no modelo.
-
Alguns cenários principais que mostram os principais fluxos de controle de todo o sistema.
-
Os serviços para capturar a capacidade de divisão em módulos, características opcionais e aspectos de
produtos de linha.
Essencialmente, as visões arquiteturais são abstrações (ou simplificações) de todo o design, nas quais as
características importantes estão mais visíveis deixando os detalhes de lado. Estas características são importantes
quando se raciocina sobre:
-
Evolução do sistema: indo para o ciclo de desenvolvimento seguinte.
-
Reuso da arquitetura, ou partes dela, no contexto de uma linha de produto.
-
Avaliação da qualidade suplementar tal como desempenho, disponibilidade, portabilidade e segurança.
-
Atribuição do trabalho de desenvolvimento às equipes ou aos sub-contratados.
-
Decisões a respeito da inclusão de componentes prontos.
-
Inserção em um sistema maior.
Padrões Arquiteturais
Os padrões Arquiteturais são formas pré-prontas para resolver problemas Arquiteturais conhecidos. Uma estrutura
arquitetural ou uma infra-estrutura Arquitetural (middleware) é um conjunto de componentes com os quais você pode
construir um determinado tipo de arquitetura. Muitas das principais dificuldades arquiteturais devem ser resolvidas na
estrutura ou na infra-estrutura, geralmente direcionada a um domínio específico: comando e controle, MIS, sistema de
controle, etc.
Exemplos de padrões Arquiteturais
Os padrões arquiteturais podem ser agrupados de acordo com as características dos sistemas nos quais eles são
mais aplicáveis, com uma categoria que trata das questões estruturais mais gerais. A tabela a seguir mostra as
categorias e os padrões que elas contêm.
Categoria
|
Padrão
|
Estrutura
|
Camadas
|
Pipes e Filtros
|
Quadro-negro
|
Sistemas Distribuídos
|
Agente
|
Sistemas Interativos
|
Modelo-Visão-Controle
|
Apresentação-Abstração-Controle
|
Sistemas Adaptáveis
|
Reflexão
|
Microkernel
|
Uma arquitetura de software, ou simplesmente uma visão arquitetural, pode ter um atributo chamado Estilo
Arquitetural, que reduz o conjunto de possíveis formas de escolha, e impõem um determinado grau de uniformidade à
arquitetura. O estilo pode ser definido por um conjunto de padrões, ou pela escolha de componentes específicos ou de
conectores como os blocos de construção básicos.
|