# Arquitetura multicamada

Em Engenharia de software, a arquitetura em camadas (mais conhecida como arquitetura multicamadas) é um sistema Cliente-Servidor onde as camadas de apresentação, processamento de aplicativos e gerenciamento de dados são separadas
A arquitetura em camadas pode ser definida como um processo de decomposição de sistemas complexos em camadas para facilitar a compreensão do mesmo, como também, facilitar a manutenção deste sistema, ainda afirma que, esta técnica foi emprestada da arquitetura de computadores, que utilizam camadas de chamada ao sistema operacional, drivers e afins.

## Arquiteturas clássicas

Camadas são uma maneira de separar responsabilidades e gerenciar dependências. Cada camada tem uma responsabilidade específica. Uma camada superior pode usar os serviços em uma camada inferior, mas não o oposto.

### Camada de apresentação

A camada de apresentação é responsável pela apresentação, interação do usuário e recebimento de dados processados pelo software bem como suas funções.
Em sistemas distribuídos, existem duas alternativas para apresentação:
* Usando um navegador web, todo o conteúdo e formulário de uma aplicação web clássica são apresentados em XML, XHTML E JavaScript, entre outras linguagens criadas para a World Wide Web. Sua comunicação com camadas é geralmente feita através do HTTP.
* Usando um cliente gordo, você produz sua própria interface gráfica do usuário. Usando as opções de exibição estendida da linguagem de programação ou da biblioteca gráfica para essa finalidade, como Flash ou Java Swing se comunicando com a camada de aplicativos por meio de protocolos de rede, como SOAP, Microsoft NET Remoting, entre outros.

### Camada de controle

A camada de controle é responsável por comandar o fluxo da apresentação servindo como uma camada intermediária entre a camada de apresentação e a lógica.

### Camada lógica de negócios

A camada lógica de negócios se refere a implementação de regras de negócio ou requisitos do sistema.

### Camada de acesso a dados

A camada de dados inclui as técnicas de persistência de dados (compartilhamento de arquivos, servidores de banco de dados e etc) e a camada de acesso a dados que encapsula os mecanismos e expõe os dados. O armazenamento persistente geralmente usa banco de dados, mas outros sistemas podem usar arquivos normais.
Ao utilizar banco de dados, as interfaces deles são usadas para troca de dados com a camada de preservação de dados. Quando programação orientada a objetos em conjunto com um DBMS relacional, a camada de acesso a dados requer mapeamento relacional de objeto.

### Injeção de Dependências

A responsabilidade para a apresentação e interação do usuário reside nos componentes da primeira camada. Esses componentes clientes permitem ao usuário interagir com os processos da segunda camada de uma maneira segura e intuitiva. O WebSphere Application Server suporta diversos tipos de cliente. Os clientes não acessam os serviços da terceira camada diretamente. Por exemplo, um componente cliente fornece um formulário no qual um cliente faz um pedido de produtos. O componente do cliente envia esse pedido aos processos da segunda camada, que verificam os bancos de dados do produto e executam as tarefas necessárias para o faturamento e a remessa.

## Vantagens e Desvantagens

Vantagens
As principais vantagens desse tipo de arquitetura são:
* Isola funções do SO facilitando sua manutenção e depuração;
* Cria uma hierarquia de níveis de modos de acesso, protegendo as camadas mais internas.
Desvantagens
As principais desvantagens desse tipo de arquitetura são:
* Desempenho: cada nova camada implica uma mudança no modo de acesso;
* Atualmente, a maioria dos sistemas comerciais utiliza o modelo de duas camadas, onde existem os modos de acesso usuário (não-privilegiado) e kernel (privilegiado);
* A maioria das versões do UNIX e o Windows da Microsoft estão baseadas neste modelo.

## Arquitetura Duas Camadas

A arquitetura duas camadas é uma arquitetura que consiste em duas camadas de software. Onde somente o maior pode acessar a camada inferior, a camada inferior é um provedor de serviços do mais alto. Portanto, frequentemente se fala de uma arquitetura cliente-servidor.
As arquiteturas cliente-servidor não precisam necessariamente ser realizadas por meio de diferentes computadores, mas o cliente também pode ser entendido como um módulo de software que acessa um segundo módulo de software no mesmo computador, geralmente dentro do mesmo aplicativo.

## Arquitetura Três Camadas

A arquitetura três camadas é uma arquitetura que possui três camadas de software, sendo elas camada do cliente, camada lógica e camada de dados. Em discrepância com a arquitetura duas camadas, há uma camada adicional sendo geralmente a camada lógica que executa o processamento de dados.
Todas as três camadas devem comunicar-se entre si. Protocolos abertos, padrões e APIs expostas simplificam essa comunicação. É possível criar os componentes do cliente em qualquer linguagem de programação, como Java ou C++. Esses clientes são executados em qualquer sistema operacional, conversando com a camada lógica do aplicativo. Os bancos de dados na terceira camada podem ser de qualquer design se a camada de aplicativo puder consultá-los e manipulá-los. A chave para esta arquitetura é a camada de lógica.

## Modelo de Camadas em Sistemas Operacionais

Um modelo de camada, também chamado de modelo shell , é um dos três principais modelos de arquitetura de sistemas operacionais. Além do kernel monolítico e do microkernel, existe o modelo de camada. No modelo de camada, os vários componentes do sistema operacional são construídos um no outro, como shells.
As transições entre as camadas são formadas por interfaces, onde as transições devem ser limpas, não há saltos (por exemplo, de um programa aplicativo diretamente para a estrutura de dados). A comunicação ocorre através das interfaces de cada camada intermediária individual.
Em geral, quanto mais próxima a camada estiver do hardware, mais privilegiada será a permissão de leitura e gravação. A transição do modo kernel para o modo usuário pode ser difícil de demarcar.

## Rastreabilidade

A cada dia o rastreamento de ponta a ponta da comunicação entre camadas ficam mais importante em sistemas complexos, podendo ser implementado por meio do padrão de medição de resposta de aplicativos mediante as transações associados de cada camada.