Arquitetura de Software: Conceitos, Princípios e Estilos Essenciais

Classificado em Computação

Escrito em em português com um tamanho de 9,71 KB

Princípios Fundamentais da Arquitetura de Software

  • Abstração
  • Encapsulamento
  • Separação de Responsabilidades
  • Acoplamento e Coesão
  • Não Duplicação
  • Parametrização e Configurabilidade
  • Clareza e Simplicidade
  • Separação de Interface e Implementação

Benefícios da Arquitetura de Software

A arquitetura de software permite-nos raciocinar e planejar para:

  • Confiabilidade do Sistema
  • Evolução
  • Reuso
  • Eficiência
  • Melhor Manutenção
  • Etc.

Vantagem de Estudar Arquitetura de Software

Entender os detalhes da arquitetura selecionada, favorecendo as melhores alternativas de design.

Problemas Causados pela Falta de Arquitetura

  • Baixo desempenho
  • Altos custos de manutenção
  • Dificuldade de evolução
  • Reuso limitado
  • Projetos ineficientes

O que é Arquitetura de Software?

  • Visão estrutural de alto nível
  • Define o estilo ou combinação de estilos para uma solução
  • Centra-se em requisitos não-funcionais
    • Os requisitos funcionais são satisfeitos através da modelagem e design de aplicações
  • Essencial para o sucesso ou fracasso de um projeto

A arquitetura de um sistema de software é a estrutura ou estruturas do sistema, incluindo:

  • Elementos de software
  • Propriedades visíveis externamente desses elementos
  • As relações entre eles

Tipos de Estruturas Arquitetônicas

Existem dois tipos de estruturas que são de interesse para um arquiteto:

  • Estruturas Estáticas (organização em tempo de design)
  • Estruturas Dinâmicas (organização em tempo de execução)

Elementos Estáticos

Tratam da concepção do sistema, quais os elementos que o compõem e como eles se relacionam.

Estes elementos de design interno incluem:

Software:
  • Módulos
  • Classes
  • Pacotes
  • Stored Procedures (Procedimentos Armazenados)
Dados (Elementos Internos):
  • Classes
  • Entidades / Tabelas Relacionais
  • Arquivos de Dados
  • Documentos XML / HTML
  • Etc.
Hardware (Componentes Internos):
  • CPU
  • Componentes de hardware do computador (monitor, teclado, etc.)
  • Componentes de Rede

O arranjo destes elementos estáticos (software e dados) define (dependendo do contexto) parcerias, relacionamentos ou conexões entre os elementos.

Estruturas Dinâmicas do Sistema

Mostram como o sistema funciona em tempo de execução.

Propriedades Visíveis Externamente

As propriedades externas se manifestam de duas formas diferentes:

  • Comportamento Visível para o Exterior
  • Atributos de Qualidade
Comportamento Visível para o Exterior

Essas propriedades estão relacionadas à função desempenhada pelo sistema do ponto de vista de um observador externo.

Mais especificamente, estão relacionadas com as interações funcionais entre o sistema e o seu ambiente.

Atributos de Qualidade

As propriedades externas estão relacionadas com os requisitos não-funcionais do sistema, tais como desempenho, segurança e manutenibilidade, entre outros.

Candidato Arquitetônico

A sugestão de arquitetura para uma determinada organização é uma estrutura dinâmica e estática que tem o potencial de apresentar o comportamento e os atributos de qualidade exigidos.

A relação entre as propriedades externamente visíveis de um sistema e sua composição interna pode ser capturada da seguinte forma:

  • O comportamento visível externamente (o que o sistema faz) é determinado pelo comportamento combinado dos elementos internos.
  • As propriedades de qualidade de um sistema, como desempenho, escalabilidade e confiabilidade, surgem a partir das propriedades de qualidade dos elementos internos.

Elemento Componente (Arquitetura)

Um elemento componente ou arquitetônico é um bloco fundamental a partir do qual um sistema pode ser construído.

Componentes devem ter os seguintes atributos claramente definidos:

  • Um conjunto de responsabilidades.
  • Um limite ou escopo.
  • Um conjunto de interfaces, que definem os serviços que o componente oferece a outros componentes.

Stakeholders (Partes Interessadas)

Um stakeholder da arquitetura é uma pessoa, grupo ou entidade com interesse no desenvolvimento de um sistema.

Estilos Arquitetônicos

O estilo arquitetônico é um mecanismo descritivo para diferenciar uma arquitetura da outra.

Geralmente, não é necessário inventar uma nova arquitetura de software para cada sistema de informação. É comum adotar uma arquitetura conhecida, avaliando suas vantagens e desvantagens para cada caso particular. A seguir, alguns estilos universais:

Cliente-Servidor

O software distribui sua carga computacional em duas partes distintas. Basicamente, consiste em um cliente fazendo requisições para outro programa (servidor) que responde.

Componentes do Estilo Cliente-Servidor:
  • Lógica de Apresentação: A parte da aplicação que interage com um dispositivo do usuário final (terminal, leitor de código de barras, laptop, etc.).
  • Lógica de Negócio: A parte de um aplicativo que utiliza informações do usuário e do banco de dados para operações sob as restrições das regras de negócio.
  • Lógica de Banco de Dados: A parte de um aplicativo que manipula os dados dentro do aplicativo.
  • Processamento de Banco de Dados: O processamento real de dados do banco de dados pelo SGBD.
Benefícios do Cliente-Servidor
  • Centralização do controle
  • Escalabilidade
  • Fácil manutenção
Desvantagens do Cliente-Servidor
  • Congestionamento do tráfego
  • Maior custo

Arquitetura em Camadas (Layered Architecture)

Especialização da arquitetura Cliente-Servidor, onde a carga é dividida em três ou mais partes (camadas), com uma clara divisão de funções: uma para a camada de apresentação (interface do usuário), uma para o cálculo (onde ocorre a modelagem de negócios) e uma para o armazenamento (persistência). Uma camada só se relaciona com a camada adjacente.

Estrutura de Camadas
  • Camada de Apresentação: É o que é visto pelo usuário (GUI).
  • Camada de Negócio: É onde os programas são executados, recebendo solicitações do usuário e enviando as respostas após o processamento.
  • Camada de Dados: É onde os dados residem e é responsável pelo acesso a eles.

Os termos "camadas" e "níveis" não são idênticos ou similares.

A "camada" refere-se à maneira como uma solução é segmentada do ponto de vista lógico:

  • Apresentação
  • Lógica de Negócio
  • Dados

Em contrapartida, o termo "nível" corresponde à maneira como as camadas lógicas são distribuídas de forma física.

Tubos e Filtros (Pipes and Filters)

  • Cada componente tem um conjunto de entradas e um conjunto de saídas.
  • A saída pode começar antes de terminar a leitura da entrada.
  • Os componentes transformam os dados (Filtros).
  • Os conectores transmitem dados de um lugar para outro (Tubos).

Enfatiza a transformação incremental de dados através de vários componentes.

Vantagens do Estilo Tubos e Filtros
  • Fácil de entender e composição simples dos filtros.
  • Suporte à reutilização. Os filtros podem ser utilizados em outros sistemas.
  • Fácil de manter e melhorar. Os filtros podem ser substituídos ou novos filtros podem ser adicionados.
  • Apoio à execução simultânea.

Estilo Arquitetônico: Blackboard (Quadro Negro)

Consiste em um repositório central de dados e um conjunto de componentes ativos ao redor do repositório de dados.

  • O comportamento básico de qualquer componente é examinar o quadro, fazer seu processamento e escrever suas conclusões no mesmo quadro.
  • Assim, um outro componente pode trabalhar com os resultados gerados pelo anterior.
  • A computação termina quando uma condição desejada é alcançada entre os resultados afixados no quadro.

O componente de controle pode ativar os componentes de processamento de acordo com um cronograma pré-definido ou inspecionar o quadro e determinar qual elemento de transformação é mais adequado para o próximo turno.

O efeito de usar o estilo Blackboard nos atributos de qualidade:

Atributos de Qualidade do Blackboard

Desempenho: É um dos pontos fortes deste estilo, por duas razões.

Manutenibilidade: Este é um forte aspecto do estilo Blackboard, porque os componentes de processamento são independentes uns dos outros e podem ser adicionados ou removidos sem alterar outros componentes.

Confiabilidade: Duas coisas a considerar.

Estilo Arquitetônico: Sistemas Orientados a Objetos (OO)

  • O estilo OO organiza o sistema em termos de comunicação entre objetos.
  • Objetos são entidades que contêm estado e operações para acessar e alterar seu estado.

Um objeto normalmente precisa enviar mensagens a outros objetos, de modo que cada objeto deve manter referências aos objetos aos quais se refere.

Entradas relacionadas: