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.