[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:

Layers Pattern: