Camadas em Camadas

Layers vs. Tiers é um daqueles assuntos que para os developers tem um cariz religioso. Basta falar no assunto para de imediato surgirem opiniões inflamadas sobre o que é e o que não é cada uma delas.

Deixo aqui a minha sobre este assunto…

A verdade é que a própria tradução das palavras para português não ajuda : se Layer se traduz directamente para 'camada' o certo é que a melhor tradução para Tier é mesmo… camada.

A diferença de conceitos, mesmo em inglês é bastante subtil: uma Tier é cada uma das Layers quando estão dispostas em camadas! (cf. por exemplo, tier on WordNet).

Para complicar a situação, levando em conta esta definição de que uma Tier é cada uma das Layers quando se encontram dispostas em camadas (ou ligadas, ou 'enfileiradas'), depois de estabelecidas as relações entre as várias Layers estas passam frequentemente a ser identificadas como Tiers na documentação técnica.

Temos portanto camadas e camadas.

Em informática, contudo, estas palavras têm significados bastante diferentes, uma vez que se referem a coisas distintas: quando falamos de Layers referimos-nos a Camadas Lógicas e quando falarmos em Tiers referimos-nos a Camadas Físicas.

Camadas Lógicas (Layers)

As camadas lógicas referem-se à organização interna de cada um dos elementos de software representando uma divisão das suas responsabilidades.
Cada camadas colabora apenas com as camadas que lhe são adjacentes através da troca de mensagens. Esta colaboração recorre frequentemente à utilização de padrões de desenho (design patterns).

Esta forma de organização facilita a manutenção do código uma vez que ao isolar as competências, reduz as dependências entre os elementos e permite que alterações feitas a uma das camadas tenha pouco ou nenhum impacto nas camadas adjacentes. Facilita também o desenvolvimento em equipa uma vez que permite que código de várias camadas seja desenvolvido em paralelo e até mesmo com recurso a diferentes tecnologias.

Tomemos como exemplo uma aplicação web cujo objectivo, de uma forma muito simplista, é estabelecer a ligação entre o utilizador e uma base de dados, processando a informação trocada entre os dois.

De certa forma, isto define de imediato três camadas naturais :

  • a camada de apresentação de dados (presentation layer), responsável pela apresentação e recolha de dados entre o utilizador e o sistema;
  • a camada de negócio (business layer) responsável pelo processamento da informação trocada entre o utilizador e a base de dados;
  • e a camada de acesso aos dados (data access layer) responsável pela persistência e consulta da informação associada ao sistema na base de dados.


Outras camadas (lógicas) poderão ser identificadas no contexto de um sistema, c

omo por exemplo a camada de segurança ou a camada de acesso a sistemas externos.

Camadas Físicas (Tiers)

As camadas físicas referem-se à distribuição de cada um dos elementos de software em tempo de execução (runtime).

Esta distribuição tanto se pode referir a hardware distinto como a outros elementos de software.

Tal como nas camadas lógicas, cada camadas física colabora apenas com as camadas que lhe são adjacentes recorrendo a protocolos de comunicação bem definidos.

Esta divisão facilita a administração do sistema e aumenta o seu potencial de crescimento (escalabilidade).

Numa aplicação web, podemos distribuir software por pelo menos três camadas físicas :

  • a camada cliente (client tier) que poderá ser o próprio browser do utilizador (caso das applets), um web server a distribuir conteúdos estáticos (ex: HTML) ou um application server a distribuir conteúdos dinâmicos (ex: JSPs, XML);
  • a camada de negócio (business tier) que poderá ser um application server a gerir EJBs ou qualquer outro tipo de middleware;
  • a camada de dados, (data tier) normalmente composta por um sistema de gestão de base de dados (DBMS).

Estas camadas poderão estar (e normalmente estão) distribuídas em máquinas separadas.

Enquanto Developers, ao desenvolver este tipo de sistemas, frequentemente executamos a aplicação completa na nossa máquina (execução local). Muitas vezes nem nos apercebemos disto mas temos (a lista não é exaustiva):

  • o hardware da nossa máquina (por definição sempre insuficiente ;-) );
  • um sistema operativo (ou mesmo o Windows :-) );
  • pelo menos uma JVM;
  • um webserver ou um application server ou uma mistura dos dois;
  • um browser;
  • eventualmente, uma base de dados;

Cada um destes componentes comunica apenas com as adjacentes – o sistema operativo tem de conhecer o hardware, a JVM tem de conhecer o sistema operativo mas não o hardware, o webserver precisa de conhecer a JVM mas não o sistema operativo, e assim por diante.

A disposição destes componentes leva-nos de imediato a pensar em camadas e o facto de estarmos a falar de componentes de software, todos a serem executados num só elemento físico remete-nos para as layers. Errado!

Pelo facto de estarmos a falar do relacionamento externo entre

os componentes de software em tempo de execução e não na sua organização interna, devemos considerá-las como tiers. Cada uma destas tier deverá estar internamente organizada em layers (bem, em relação ao Windows… :-) )

Concluindo, na minha opinião, Layers são Camadas Lógicas e Tiers são Camadas Físicas. Não existe uma relação predefinida entre Camadas Lógicas e Camadas Físicas num sistema. Uma Camada Física pode hospedar diversas Camadas Lógicas e uma Camada Lógica pode ocupar diversas Camadas Físicas.

zp8497586rq