[Atualizado em 31 de outubro de 2008.]
No contexto de arquitetura de software, ambos os termos técnicos Tier e Layer em inglês podem ser traduzidos para português como Camada, em geral relativo a sistemas multi-camadas. Mas cuidado para não haver equívoco ou ambiguidade, pois os dois termos não são meros sinônimos, têm significados distintos.
- Layer se refere a Camada Lógica de organização dos componentes do sistema ou aplicação.
- Tier se refere a Camada Física ou Estrutural dos componentes com foco na infraestrutura (hardware, sistema operacional e serviços/servidores) e suas responsabilidades no sistema.
Segundo Peter Eeles, no artigo Layering Strategies, o termo layer (camada) se refere à aplicação do padrão arquitetural genericamente conhecido como Layers Pattern, que estrutura em camadas um sistema que requer decomposição, por algum motivo. Por exemplo, um sistema:
- que é muito complexo para ser compreendido em seu todo de uma só vez;
- que é difícil de ser mantido;
- que é construído por equipes distintas, possivelmente com habilidades e conhecimentos diferentes;
- cuja maioria dos elementos reusáveis são difíceis de se identificar.
Eis as principais camadas lógicas (layers), segundo Martin Fowler in: Patterns of Enterprise Application Architecture (Addison-Wesley, 2003, ISBN-13 978-032112742-6, 560 p.), Capítulo 1 – Layering, The Three Principal Layers:
Camada Lógica | Responsabilidades |
---|---|
Apresentação | Interação com usuário (exibição de informações, validação de entrada), provisionamento de serviços. |
Domínio / Negócio | Lógica específica particular ao sistema ou aplicação. |
Acesso a Dados | Comunicação com bancos de dados, EIS, sistemas de mensagens, monitores de transação. |
Uma boa prática que se prega no projeto da arquitetura de software é que cada camada lógica só deve interagir com a(s) camada(s) imediatamente adjacente(s), visando a maior separação de atribuições (coesão) e o baixo acoplamento.
As camadas físicas (tiers) caracterizam a infraestrutura sobre a qual o sistema ou aplicação executa. As camadas físicas podem variar de acordo com a plataforma e o ambiente tecnológicos específicos que se utiliza. Um modelo canônico de camadas físicas em ambiente web pode ser resumido como a seguir.
Camada Física | Caracterização |
---|---|
Cliente | Navegador (browser) web, páginas DHTML (HTML, JavaScript, CSS, DOM), componentes/plug-ins adicionais RIA (Flash, Applet Java, JavaFX, ActiveX, XUL etc.), outros objetos MIME (dados, documentos e arquivos em outros formatos). |
Rede e Serviço Web | Servidor web, protocolo HTTP sobre TCP/IP, processamento de requisição-resposta do cliente web, encaminhamento e integração com servidor de aplicações. |
Serviços de Componentes e Aplicação | Servidores de aplicação (plataformas mais comuns: Java EE e Microsoft .NET), servidor de objetos distribuídos (EJB, COM+, CORBA etc.). |
Serviços de Dados e Integração | Servidores de bancos de dados (SGBD), sistemas de mensageria, mecanismos de integração/interação com outros sistemas (EIS). |
Tipicamente, as camadas lógicas são mapeadas em uma ou mais fatias da camada física da arquitetura. Para exemplificar um mapeamento típico de camadas lógicas em camadas físicas no ambiente web, a apresentação em geral abrange o cliente web, o servidor web e os mecanismos MVC do servidor de aplicação; o domínio ou negócio se concentra no servidor de aplicação; e o acesso a dados se concentra nos servidores de bancos de dados e outros eventuais componentes na camada física de dados e integração.
Contudo, para Eeles, o termo layer é um conceito geral de divisão de um sistema em camadas, que pode ter diversas estratégias de organização e aplicação. Este autor define tier como um caso específico de layer associado a estratégia particular de responsibility-based layering (camadas baseadas em responsabilidades).
Eeles ainda adverte para o fato que mesmo tiers não implicam a efetiva organização ou distribuição física. Um sistema 3-tier pode estar fisicamente em um único hardware, ou ter suas camadas distribuídas entre dois ou mais computadores (grid, cluster, farm etc.).
Para saber mais:
- Designing Enterprise Applications with the J2EE Platform, Second Edition. Livro por Inderjeet Singh, Beth Stearns, Mark Johnson e o Sun Enterprise Team, Addison-Wesley, Copyright © 2002 Sun Microsystems, 440 p., ISBN 0-201-78790-3. Disponível gratuitamente on-line (HTML), ou em formato PDF para baixar. Aplicável à plataforma tecnológica Java EE.
- Application Architecture for .NET: Designing Applications and Services. Microsoft Patterns & Practices Developer Center, Microsoft Corporation, dezembro 2002, 166 p., disponível em formato PDF para download gratuito. Aplicável à plataforma tecnológica Microsoft .NET Framework.
- A Guide to Building Enterprise Applications on the .NET Framework. MSDN Architecture Center, Building Distributed Applications, Microsoft Corporation, setembro 2003. Aplicável a Microsoft .NET Framework.
- Desenvolvimento em Camadas [em Português]. Por Cláudio Chiba e Alexandre Nardi, Opus Software e Microsoft, MSDN Brasil, 21 de maio 2007.
- Web Applications: N-Tier vs. N-Layer, por David Hayden, 22 de julho 2005, em seu blog. Também publicado em CodeBetter.com, .NET Tutorials, Patterns, and Practices.
- Should all apps be n-tier?, por Rockford Lhotka, 21 de julho 2005, em seu blog.
- Layers and Tiers and Bears, oh my – Part1, por Scott Stewart, 6 de abril 2005, blog em dotNETjunkies.com.
- About layers and tiers, por Jack van Hoof, 5 de março 2008, SOA and EDA blog.
- The Layered Architecture Style, por Arnon Rotem-Gal-Oz, 5 de fevereiro 2008, em seu blog.
- A reminder on “Three/Multi Tier/Layer Architecture/Design” brought to you by my late night frustrations, por Scott Hanselman, 1º de junho 2005, em seu blog.
- Layers and Tiers, por Pranshu Jain, 15 de setembro 2006, em seu blog. Artigo também publicado em IT Toolbox.
- Arquitectura de aplicação e modelo 3 camadas [PDF em Português], por Paulo Souza, professor de Engenharia da Informação, Instituto Superior de Engenharia do Porto, Portugal, 2006.
Layers Pattern:
- Design Pattern: Layers, por Steven Black.
- Pattern: Layers, por Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, e Michael Stal; 2000; em Vico Open Modeling.
- Pattern Analysis/Layers, Architecture Patterns Wiki, em CrystalClear Software.
Excelente material. Parabéns!
Otimo post.
Parabens
@Jossemar e @Sandro:
Muito obrigado, Jossemar e Sandro! Valeu.
Excelente texto, claro, completo, sem obscuridades desnecessárias e citando fontes! É um assunto que todos dizem já conhecer, mas ninguém realmente tão a fundo.
@Daniel: Muito obrigado pela participação e pelo retorno tão positivo! Fico muito agradecido e feliz.
Abraço.
Excelente artigo cara, parabéns.