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 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.


  • 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.


  • 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.
  • 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.