Padrão Camadas. Talvez o mais importante padrão arquitetural Merece detalhamento

Documentos relacionados
O que é um sistema distribuído?

Modelagem de Dados MODELAGEM DE DADOS. Sistemas de Banco de Dados. Profa. Rosemary Melo

Arquitetura de software

Fundamentos de Sistemas Operacionais de Arquitetura Aberta. CST em Redes de Computadores

O Processo Unificado: Workflow de Análise. Graduação em Informática Profa. Dra. Itana Maria de Souza Gimenes 2009

Engenharia de software distribuído. Artur Sampaio Lívia Castro Degrossi

Introdução aos computadores, à Internet e à World Wide Web. Prof. Marcelo Roberto Zorzan

Arquiteturas de Software Problemas e soluções

FUNDAMENTOS DE SISTEMAS OPERACIONAIS MÓDULO 1

Aula 4 TECNOLOGIA EM JOGOS DIGITAIS JOGOS MASSIVOS DISTRIBUÍDOS. Marcelo Henrique dos Santos

Aula 01 Conceito de Banco de Dados e SGBD

Arquitetura de Aplicações J2EE. Jorge Fernandes Outubro de 2003

Windows NT 4.0. Centro de Computação

Aplicações com Banco de Dados e Cliente-Servidor

3 Trabalhos relacionados

Tecnologias da Informação TI /2 Material de apoio ler bibliografia recomendada (Stair)

Notas de Aula 03: Introdução a Orientação a Objetos e a UML

INSTALANDO E CONFIGURANDO O WINDOWS SERVER 2012

Fábio Amado João Maio 33306

Sistemas Distribuídos


Data Warehouse ETL. Rodrigo Leite Durães.

ATIVIDADES PRÁTICAS SUPERVISIONADAS

Introdução à Ciência da Computação

Sumário. Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) Paradigmas. Objetos Distribuídos. Tecnologias e Motivações

Sistemas Distribuídos Capítulo 3 - Aula 3

Banco de Dados Distribuído

Guia do Processo de Teste Metodologia Celepar

Padrões Arquiteturais Pattern-Oriented Software Architecture (POSA)

UML. Rodrigo Leite Durães.

Arquitetura de Computadores

Documento de Arquitetura de Software- SGE

Administração de Sistemas GNU/Linux

Arquitetura de Software: Sistemas RNA e Ava Edulivre. Ana Claudia Costa, Rharon Maia, Wolgrand Cardoso1

Requisitos. Silvério Sirotheau

Organização e Arquitetura de Computadores. Hugo Barros

Estilos Arquiteturais. Estilos Arquiteturais. Exemplos de Estilos Arquiteturais. Estilo: Pipe e Filtros

Formação de DBAs SQL Server 2008

Sistemas de Troca de Mensagens

S12 - Software e Engenharia de Software

Introdução: EJBs de Sessão. Prof. Fellipe Aleixo

Eduardo Bezerra. Editora Campus/Elsevier

Arquitectura de Sistemas Paralelos e Distribuídos Modelos de Sistemas

Modelo OSI. Marcelo Assunção 10º13. Curso Profissional Técnico de Gestão e Programação de Sistemas Informáticos. Disciplina: Redes de Comunicação

Web Services. (Introdução)

Protocolos de Interligação de Redes Locais e a Distância Modelos de Referência. Thiago Leite

Padrões Arquiteturais e de Integração - Parte 1

ADMINISTRANDO O WINDOWS SERVER 2012

LogMeIn lança Cubby Enterprise para sincronização e compartilhamento de arquivos na nuvem

16/8/2010. A arquitetura de um sistema computacional representa o modelo da organização e funcionamento de um sistema de processamento

Redes de computadores

Resumo: Perguntas a fazer ao elaborar um projeto arquitetural

Conceitos básicos sobre computadores

Informática Sistemas Operacionais Aula 5. Cleverton Hentz

O que é um banco de dados? Banco de Dados. Banco de dados

Arquitetura e Objetos Distribuídos em CORBA. Aula 3. Especificações OMA Object Web

Introdução a Sistemas de Informação

Engenharia de Software. Projeto de Software. Projeto: definição. Profa. Dra. Lúcia V. L. Filgueiras Profa. Dra. Selma Shin Shimizu Melnikoff

Roteiro... Sistemas Distribuídos Aula 4. Troca de mensagens. Comunicação entre processos. Conceitos de SD, vantagens e desvantagens

REDES LOCAIS. Quando você precisar ir além do computador em cima de sua mesa, esta na hora de instalar uma rede local.

Executa em qualquer plataforma que possua o Java (JDK) da Oracle

Definição de Padrões. Padrões Arquiteturais. Padrões Arquiteturais. Arquiteturas de Referência. Da arquitetura a implementação. Elementos de um Padrão

SISTEMA GERENCIADOR DE BANCO DE DADOS

Curso: Banco de Dados I. Conceitos Iniciais

Sistemas de Informação e Decisão. Douglas Farias Cordeiro

Fundamentos de Sistemas Operativos

Bancos de Dados Distribuídos. Gabriel Resende Gonçalves 4 de fevereiro de 2014

Unidade II MODELAGEM DE PROCESSOS. Profa. Gislaine Stachissini

RUP RATIONAL UNIFIED PROCESS PRÁTICAS RECOMENDADAS. Prof. Fabiano Papaiz IFRN

Perfil Formação Acadêmica Experiência Profissional Capacitação Profissional

Aplicações Web com Servlets e JSP

Bem-vindo ao tópico sobre a ferramenta Importar do Excel.

Sistema centralizado O Paradigma Cliente/Servidor

Criando uma aplicação web

ARQUITETURA DE SISTEMAS. Cleviton Monteiro

Bruno Antunes da Silva UFSCar - Sorocaba

Gestão de memória - Memory Management Unit (MMU)

Gestão de Conteúdo com Plone. Luiz Ferreira

4 Arquitetura Adotada

Programação de Sistemas em Tempo Real

Banco de Dados Fundamentos Básicos. Hélder Antero Amaral Nunes

Firewalls. Carlos Gustavo A. da Rocha. ASSR

Sistemas Operacionais. Prof. M.Sc. Sérgio Teixeira. Aula 05 Estrutura e arquitetura do SO Parte 2. Cursos de Computação

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Firewall. Prof. Marciano dos Santos Dionizio

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA IMPLEMENTAÇÃO

Teste de Software. Roberta Coelho

Redes de Computadores

Sistema de Gestão de Banco de Dados SGBD. David Fernandes França

UFG - Instituto de Informática

Este artigo é um em uma série para auxiliar na instalação, no troubleshooting e na manutenção de produtos Cisco Small Business.

Princípios e Conceitos de Desenho de Software. Projeto de Sistemas de Software Prof. Rodrigo Ribeiro

Modelo de Camadas. Redes de Computadores

Transcrição:

Padrão Camadas O Talvez o mais importante padrão arquitetural Merece detalhamento Problema Imagine que esteja projetando um sistema cuja característica principal é uma mistura de assuntos de alto nível com assuntos de baixo nível, em que os assuntos de alto nível usam os assuntos de baixo nível. A parte de baixo nível está frequentemente perto do hardware A parte de mais alto nível está frequentemente perto do usuário O fluxo de comunicação tipicamente consiste de pedidos fluindo do alto para o baixo níveis As respostas andam na direção contrária Solução: Decomposição do sistema: partições e camadas Uma estrutura elegante pode freqüentemente ser elaborada usando camadas e partições Uma camada é um subsistema que adiciona valor a subsistemas de menor nível de abstração Uma partição é um subsistema "paralelo" a outros subsistemas Página 1 de 12

Lembre que subsistemas devem ser coesos (trata de responsabilidades fortemente relacionadas) Tem forte acoplamento dentro de um subsistema Tem fraco acoplamento entre subsistemas Para minimizar o acoplamento, camadas freqüentemente se comunicam apenas com as camadas "vizinhas" A decomposição pode terminar quando você atingir subsistemas com temas claros que sejam simples de entender Alguns sistemas muito pequenos não necessitam de camadas e partições Implementação Descrevemos a seguir alguns detalhes de implementação do padrão 1. Defina o critério de abstração para agrupar tarefas em camadas Pode ser a distância conceitual do "chão" Pode ser baseado em outro critério dependente do domínio Pode ser baseado na complexidade conceitual Uma forma comum de criar camadas Nas camadas inferiores, usa a distância do hardware Nas camadas superiores, usa a complexidade conceitual Página 2 de 12

Exemplo de camadas: Elementos visíveis ao usuário Módulos específicos da aplicação Nível de serviços comuns Nível de interface ao sistema operacional (ou outra plataforma como uma JVM) O sistema operacional em si que pode estar estuturado em camadas (Microkernel) O hardware 2. Determine o número de níveis de abstração (baseado no critério acima) Cada nível de abstração corresponde a uma camada Às vezes não é simples decidir se deve haver uma quebra de uma camada em subcamadas ou não Camadas demais podem afetar o overhead Camadas de menos comprometem a estrutura 3. Dê um nome e atribua tarefas a cada camada Para a camada de cima, a tarefa é a tarefa global do sistema, do ponto de vista do usuário Outras camadas existem para ajudar as camadas de cima Pode-se proceder de baixo para cima, mas isso requer bastante experiência Melhor proceder de cima para baixo 4. Especifique os serviços O princípio básico é de separar as camadas uma das outras Nenhum módulo abrange duas camadas Tente manter mais riqueza acima e mesno abaixo Isso ajuda a prover bons serviços de alto nível para o programador "em cima" Chamamos isso de "pirâmide invertida de reuso" 5. Refine as camadas Página 3 de 12

Itere nas 4 etapas acima Dificilmente se acerta o critério de abstração de primeira, antes de ver que camadas estão surgindo Quando as camadas surgem, pode-se verificar se o critério de abstração está ok 6. Especifique uma interface para cada camada Black box (preferível) A camada J nada sabe sobre a camada J-1 e usa uma interface "plana" para acessá-la Pode usar o padrão Façade para organizar a interface White box A camada J conhece detalhes da estrutura interna da camada J-1 e usa esse conhecimento ao acessar a camada Por exemplo, conhece vários objetos ou componentes internos da camada 7. Estruture as camadas individuais Quebre a camada em subsistemas (partições) menores se ela for complexa 8. Especifique a comunicação entre camadas Normalmente, usa-se o modelo "push" A camada J passa a informação necessária para a camada J-1 ao chamá-la O modelo pull pode ser usado mas cria mais acoplamento entre camadas Veja discussão de push versus pull no padrão Observer 9. Desacople camadas adjacentes Evite situações em que a camada de baixo sabe algo sobre seus clientes (camada acima) Acoplamento unidirecional é preferível Página 4 de 12

Por isso, modelo push é melhor Para fazer uma chamada de baixo para cima mas ainda manter desacoplamento, use callbacks A camada de cima registra métodos de callback junto à camada de baixo para eventos específicos Quando o evento ocorre na camada de baixo, ela chama o callback Esta desacoplado porque o método está sempre presente na camada de cima Assim, mantemos acoplamento unidirecional, embora haja comunicação bidirecional Um padrão que ajuda a encapsular callbacks é Command Claro que a grande técnica de desacoplamento é de usar uma interface 10. Projete uma estratégia de tratamento de erros O esforço de programação e overhead podem ser grandes para tratar erros numa arquitetura em camadas Um erro pode ser tratado na camada onde foi descoberto ou numa camada superior No segundo caso, deve haver mapeamento para tornar o erro semanticamente reconhecível pela camada de cima Exemplo: Não apresente ao usuário uma mensagem dizendo "Exceção IllegalArgumentException in DoItNow()" Tente tratar erros na camada mais baixa possível Isso simplifica todas as camadas superiores que não sabem nem devem saber do erro "O componente mais rápido, mais robusto e mais barato é aquele que não está aí" Exemplos Sietmas de informação implementadas usando Arquiteturas em N Camadas Página 5 de 12

Vide adiante Máquinas Virtuais Java usa uma VM para isolar camadas de alto nível de detalhes de baixo nível (hardware, plataforma operacional) APIs Uma API é uma camada que encapsula camadas inferiores de funcionalidade comumente empregada Windows Windows usa as seguintes camadas para se isolar do hardware System Services Resource Management (Processor, I/O, Virtual Memory, Security,...) Kernel Hardware Abstraction Layer (HAL) Hardware Consequências Vantagens Reuso de camadas Devido à boa encapsulação provida pelo uso de interfaces Suporte para a padronização Certas camadas importantes podem ser padronizadas ex. API POSIX ex. J2EE Permite usar implementações de vários fornecedores Dependências são mantidas locais Alterações de implementações que não alterem as interfaces não saem da camada Página 6 de 12

Intercambiabilidade Implementações podem ser trocadas Desvantagens Cascatas de mudanças de comportamento Sob certas situções, alterações de comportamento numa camada podem fazer cascata ex. alteração de um enlace de 10 Mbps para 1Gbps pode engargalar camadas superiores Menor eficiência Camadas adicionam overhead Um "mar monolítico de objetos" é mais eficiente Porém, mais acoplado Arquiteturas em n camadas Faremos um resumo histórico das arquiteturas de aplicações É uma aplicação muito importante do padrão Layers Arquitetura centralizada Dominantes até década de 80 como arquitetura corporativa Problema básico: interface não amigável Arquitetura em 2 camadas Sistemas em camadas surgiram para: Melhor aproveitar os PCs da empresa Oferecer sistemas com interfaces gráficas amigáveis Integrar o desktop e os dados corporativos Em outras palavras, permitiram aumentar a escalabilidade de uso de Sistemas de Informação Os primeiros sistemas cliente-servidor eram de duas camadas Camada cliente trata da lógica de negócio e da UI Página 7 de 12

Camada servidor trata dos dados (usando um SGBD) Arquitetura em 3 camadas A arquitetura cliente/servidor em 2 camadas sofria de vários problemas: Falta de escalabilidade (conexões a bancos de dados) Enormes problemas de manutenção (mudanças na lógica de aplicação forçava instalações) Dificuldade de acessar fontes heterogêneas (legado CICS, 3270,...) Inventou-se a arquitetura em 3 camadas Camada de apresentação (UI) Camada de aplicação (business logic) Camada de dados Página 8 de 12

Problemas de manutenção foram reduzidos, pois mudanças às camadas de aplicação e de dados não necessitam de novas instalações no desktop Observe que as camadas são lógicas Fisicamente, várias camadas podem executar na mesma máquina Quase sempre, há separação física de máquinas Em inglês, usa-se "layer" e "tier" Para certas pessoas, não tem diferença Para outras, "tier" indicaria camada física Arquitetura em 3/4 camadas Web-Based A arquitetura em 3 camadas original sofre de problemas: A instalação inicial dos programas no desktop é cara O problema de manutenção ainda persiste quando há mudanças à camada de apresentação Não se pode instalar software facilmente num desktop que não está sob seu controle administrativo Em máquinas de parceiros Em máquinas de fornecedores Em máquinas de grandes clientes Página 9 de 12

Em máquinas na Internet Então, usamos o Browser como Cliente Universal Conceito de Intranet A camada de aplicação se quebra em duas: Web e Aplicação Evitamos instalar qualquer software no desktop e portanto, problemas de manutenção Evitar instalação em computadores de clientes, parceiros, fornecedores, etc. Às vezes, continua-se a chamar isso de 3 camadas porque as camadas Web e Aplicação freqüentemente rodam na mesma máquina (para pequenos volumes) Arquitetura distribuída em n camadas Os problemas remanescentes: Não há suporte a Thin Clients (PDA, celulares, smart cards, quiosques,...) pois preciso usar um browser (pesado) no cliente Dificuldade de criar software reutilizável: cadê a componentização? Fazer aplicações distribuídas multicamadas é difícil. Tem que: Implementar persistência (impedance mismatch entre o mundo OO e o mundo dos BDs Página 10 de 12

relacionais) Implementar tolerância a falhas com fail-over Implementar gerência de transações distribuídas Implementar balanceamento de carga Implementar resource pooling etc. As empresas não querem contratar PhDs para implementar sistemas de informação! O truque é introduzir middleware num servidor de aplicação que ofereça esses serviços automaticamente Além do mais, as soluções oferecidas (J2EE,.Net) são baseadas em componentes As camadas podem ter vários nomes: Apresentação, interface, cliente Web Aplicação, Business Dados, Enterprise Information System (EIS) Página 11 de 12

programa Página 12 de 12