Resumo Design Multi-Camadas
- Projeto:
- Em portugues:
- 1. Especificação da modelagem e arquitetura do sistema a ser construído => Design
- 2. Gestão do escopo, do custo, do tempo e das atividades na construção de algo => Project
- Em portugues:
- Em Engenharia de Software é comum adotar os Padrões de Projeto para problemas comuns no design de software
- Padrões de projeto:
- Não são códigos e sim, especificações de como lidar com problemas e projetar soluções
- Essas soluções estão no nível de design para problemas recorrentes que engenheiros de software encontram com frequência
- Categorias:
- Padrão de projeto criacional
- Lidam com mecanismos de instanciação de objetos de maneira adequada à situação
- Padrão de projeto estrutural
- Se preocupam em melhor organizar a estrutura das classes e relacionamentos entre classes e objetos
- O objetivo principal destes padrões é aumentar a funcionalidades das classes envolvidas sem alterar muito sua composição
- Padrão de projeto comportamental
- Identificam padrões de comunicação comuns entre objetos, aumentando a flexibilididade da comunicação entre os objetos relacionados levando em conta a forma como uma classe se comunica com a outra.
- Padrão de projeto criacional
- Padrões de projeto:
- Exemplos de padrões de projeto:
- Camadas
- Cliente-Servidor
- MVC (Model-View-Controller)
- Micro-serviços
- PF (Pipes & Filters)
- P2P (Peer-To-Peer)
- SOA (Service Oriented Architecture)
- P/S (Publish-Subscribe)
- Foco: Layer ou Level (Camadas)
- Quebra o problema em problemas menores
- Cada um desses problemas menores é uma camada onde se pode construir
- concetos, ferramentas, tecnologias, infraestruturas, linguagens independentes de outras camadas do projeto.
- Reflexões para modelagem:
- Problemas podem ser catregorizados pela natureza do problema que se quer resolver:
- Matemático: foco na capacidade do sistema computacional, em que aspectos como IHC (Interface Humano-Computador) ou Armazenamento embora importantes não são a essência do que se quer resolver
- Engenharia: onde o foco está no suporte que o sistema oferece a áreas de aplicação como é o caso de CAD (Computer Aided Design), CAE (Computer Aided Engineering), CAM (Computer Aided Maintenance), por exemplo
- Negócios: onde o foco está em processos como BPM (Business Processing Modelling) e CRM (Customer Relationship Management) e na cadeia de suprimentos
- Indústria: o interesse está em células de manufatura, automação, indústria 4.0 e outras.
- Considera-se também Verticais de Negócio como Energia, Governo, Transporte, Saúde, Finanças, Segurança, etc.
- Problemas podem ser catregorizados pela natureza do problema que se quer resolver:
- Introduziremos abaixo, a Máquina Multi-Nível para tornar mais fácil o entendimento...
Máquina Multi-Nível
- Layer ou Level:
- Camada ou nível podem ser utilizados como sinônimos
- Estes são normalmente mostrados num esquema vertical.
- Tier:
- Um 'nível (layer)' refere-se a uma divisão funcional do software, mas uma camada (tier) refere-se a uma divisão funcional do software que é executada em infraestrutura separada das outras divisões.
- Cliente-Servidor:
- Frontend é implementado no cliente (requisita) e a parte lógica no Servidor (responde) e independentes uma da outra
- Cliente-Servidor é considerado como 2-Tiers.
- Perfis de profissionais podem ser específicos em cada tier. Ex: UX/UI para frontend, backend para desempenho, escalabidilidade, tolerância a falhas, etc e DBA para camada de persistência.
- As interações devem ser claramente definidas para que os Tiers possam ser definidos.
- Máquina de Turing
- Alan Turing, provou – ao final dos anos 30… ser possível usar uma…”máquina simples” – para executar uma extensa variedade de ‘tarefas complexas’. Nesse período ocorreu uma mudança geral na percepção do computador; que passou de “instrumento matemático” à uma “máquina universal de processamento de informação”.
- Constatou que programação ao nível de 1s e 0s era complexa
- Usava cordão de bits (Bitstring)
- Máquian de dois níveis:
- Turing imaginou um computador com duas camadas, sendo uma caixa, a camada inferior ou a primeira, constituída de circuitos básicos, e uma camada superior, que ele denominou de Máquina Hipotética, que seria capaz de receber instruções de mais alto nível e converter numa sequência de bits que programaria a camada inferior.
- Interface entre níveis da máquina:
- Máquina Hipotética: ler instruções de uma linguagem L1 e traduzir as instruções da linguagem L1, mais simples, para instruções, da linguagem L0
- Uma instrução de L1 poderia corresponder a mais de uma instrução de L0, o que tornaria a vida dos programadores mais fácil
- Aparece a necessidade de compiladores considerando que a tradução pode ser complexa
- Interpretação: faz a conversão por meio de máquinas virtuais, como o Java
- Compilação: tradução como no C, C++ e outras
- Organização Multi-Camadas:
- Organização: Consiste em especificar o conjunto de camadas que comporão o produto final, isto é, o sistema sendo projetado
- Em computadores, descreve a estrutura de camadas
- Arquitetura: especifica a estrutura de camadas, descrevendo:
- Interface: modo como se relaciona com outras camadas
- Entidades: muito comumente referenciadas como componentes, objetos, classes ou método
- Relacionamentos internos à camada.
- Organização: Consiste em especificar o conjunto de camadas que comporão o produto final, isto é, o sistema sendo projetado
- Todo projeto deve começar analisando a quantidade de tiers aplicáveis. Feito isso, passa para a definição da organização de cada tier.
Projetos Multi-Camadas
- MVC - Model View Controller
- O grande objetivo do padrão MVC é isolar ao máximo a camada de apresentação.
- Motivo da escolha: é um padrão em tiers e não em camada
- Focado no reuso de código e na separação de conceitos em três camadas interconectadas
- Visão:
- Tier do frontend do sistema
- Responsável pelo gerenciamento gráfico da interface do usuário, ou seja ,de todos os formulários, botões, elementos gráficos e todos os outros elementos HTML que estão dentro do aplicativo. As visualizações são criadas a partir de elementos HTML, XML, AS e também podem ser usadas para gerar conteúdo RSS, para agregadores ou apresentações em Flash. Ao separar o design do aplicativo, sua lógica reduz muito o risco de erros ocorrendo quando o designer decide alterar a interface do aplicativo alterando, por exemplo, um logo-tipo ou uma tabela
- Modelo:
- Parte do sistema que gerencia todas as tarefas relacionadas aos dados: validação, estado de sessão e controle, estrutura de fonte de dados (banco de dados). O Modelo reduz consideravelmente a complexidade do código que o desenvolvedor precisa para escrever
- Modelo como um servidor na estrutura CS fica a espera de requisições de funções ou serviços, assim, permite que o acesso a dados para serem coletados, gravados ou retornados.
- Controle:
- Responsável pelo manuseio de eventos. Esses eventos podem ser acionados por um usuário interagindo com o aplicativo ou por um processo do sistema. O controlador aceita solicitações e prepara os dados para uma resposta. É também responsável por estabelecer o formato dessa resposta. Ele ainda interage com o Modelo para recuperar os dados necessários e gera a Vis
- É focado na ação do usuário onde os dados são manipulados, dados que o usuário insere ou atualiza, invocando em seguida o modelo
- Seleciona qual funcionalidade (lógica) deverá ser aplicada pelo modelo e qual a visão que será apresentada ao usuário.
- Visão e Modelo estão muito próximos da IHC do usuário enquanto que o Modelo pode estar em qualquer lugar da rede, numa nuvem, por exemplo.
- Arquitetura Internet
- Dividida em 5 camadas, parte é em software e parte em hardware
- Camada Física:
- Descreve as características físicas da comunicação tais como a natureza do meio usado para a comunicação (cobre, fibra-óptica ou links de rádio) e todos os detalhes relacionados com os sinais (modulações, comprimentos de onda, níveis de sinal, sincronizações, distâncias máximas, etc).
- Conectividade: Como um equipamento (servidor, notebook, IoT) se conecta à rede. Define formas e dimensões de conectores, valores de sinais elétricos, frequências, etc
- Formato: especifica como os bits 0 e 1 são representados no meio físico em termos do tipo de sinais (elétrico, óptico e ondas de rádio) susceptiveis a serem transmitidas no meio físico
- Envio/Recepção: uma vez definida a conectividade e o formato dos bits 0 e 1, o padrão desta camada deve especificar como enviar e receber os bits no meio físico e distinguir como separar sinais de ruídos
- Camada MAC:
- Subcamada de enlace do modelo OSI. LLC não será abordada
- Introduz a noção de ligação entre os nós da rede (Enlace). Endereçamento é
- Aplicação: Formada por um vasto conjunto de protocolos que permitem o correto funcionamento dos diversos Serviços/Aplicações do modelo TCP/IP. Esta camada não possui um padrão comum para todas as aplicações, ou seja, consoante o serviço em questão irá depender também o protocolo que o vai atender. Por exemplo o serviço e-mail utiliza o protocolo SMTP, sempre que este serviço é solicitado ao TCP/IP (envio ou recepção de e-mail), é este protocolo que se encarrega de atender. De igual modo sempre que é solicitado ao TCP/IP o serviço www o protocolo que se encarrega de atender é o HTTP. Ou seja, por trás de cada aplicação existe um protocolo específico seja ele o FTP,TELNET, HTTP, SMTP, POP3, DNS, etc.
- Como o nome diz, Camada de Acesso a Meio, as comunicações, como exemplo, uma requisição de página Web, ficam paradas nesta subcamada esperando o momento adequado para o envio. Implica que tem que estar próxima da hardware (físico) para perceber o momento que ele estará disponível para receber os bits e encaminhá-los.
- Camada de Rede: A função principal da camada de rede é pegar uma comunicação na rede de origem, roteá-la através da Internet e entregá-la na rede de destino. Como , muitas vezes, a comunicação precisa atravessar diversas redes no meio do caminho, muitos vezes em países diferentes, então a comunicação precisa ser roteada para chegar à rede de destino corretamente.
- Camada de Transporte: Completando o roteamento da comunicação por uma ou mais redes e a entrega no equipamento destino é necessário endereçar a aplicação envolvida na comunicação. Esta camada permite criar um circuito virtual entre a aplicação de origem e a aplicação parceira no destino, também chamada fim-a-fim.
- Camada de Aplicação: É a função que pretende se comunicar e que tem crescido assustadoramente em termos de destinação. É uma camada que cuida apenas do aspecto da comunicação, ou seja, não entra no mérito da lógica e da interface da funcionalidade que o usuário utilizan o seu dia-a-dia.
- Tiers
- Quando pensamos em Tiers de Computação, focando no processamento, temos:
- Computação de Borda
- Computação em Nébula
- Comptuação em Nuvem
- Quando avaliamos algumas aplicações. como Web. embarcado ou Telecom, podemos inserir mais tiers e eventualmente, chegar a 7 tiers ou mais. isso mostra o quão importante é estudar Camadas e Tiers, visto que é a realidade dos desenvolvedores.
- Quando pensamos em Tiers de Computação, focando no processamento, temos: