# Modelo em três camadas

Modelo em três camadas (3-Tier), derivado do modelo 'n' camadas, recebe esta denominação quando um sistema cliente-servidor é desenvolvido retirando-se a camada de negócio do lado do cliente. O desenvolvimento é mais demorado no início comparando-se ao modelo em duas camadas porque é necessário dar suporte a uma maior quantidade de plataformas e ambientes diferentes. Em contrapartida, o retorno vem em forma de respostas mais rápidas nas requisições, tanto em sistemas que rodam na Internet ou em intranet, e mais controle no crescimento do sistema.

## Definição

As três partes de um ambiente modelo três camadas são: camada de apresentação, camada de negócio e camada de dados. Características esperadas em uma arquitetura cliente-servidor 3 camadas:
* O software executado em cada camada pode ser substituído sem prejuízo para o sistema;
* Atualizações e correções de defeitos podem ser feitas sem prejudicar as demais camadas. Por exemplo: alterações de interface podem ser realizadas sem o comprometimento das informações contidas no banco de dados.

## Camadas
### Camada de apresentação

É a chamada GUI (Graphical User Interface), ou simplesmente interface. Esta camada interage diretamente com o usuário, é através dela que são feitas as requisições como consultas, por exemplo.

### Camada de negócio

Também chamada de lógica empresarial, regras de negócio ou funcionalidade. É nela que ficam as funções e regras de todo o negócio. Não existe uma interface para o usuário e seus dados são voláteis, ou seja, para que algum dado seja mantido deve ser utilizada a camada de dados.

### Camada de Dados

É composta pelo repositório das informações e as classes que as manipulam. Esta camada recebe as requisições da camada de negócios e seus métodos executam essas requisições em um banco de dados. Uma alteração no banco de dados alteraria apenas as classes da camada de dados, mas o restante da arquitetura não seria afetado por essa alteração.

## Aplicações
### Aplicações monolíticas (uma camada)

Nos tempos antigos do reinado do grande porte e do computador pessoal independente, um aplicativo era desenvolvido para ser usado em uma única máquina (standalone). Geralmente esse aplicativo continha todas as funcionalidades em um único módulo gerado por uma grande quantidade de linhas de código e de difícil manutenção. A entrada do usuário, verificação, lógica de negócio e acesso a banco de dados estavam todos presentes em um mesmo lugar.

### Aplicações em duas camadas

A necessidade de compartilhar a lógica de acesso a dados entre vários usuários simultâneos fez surgir as aplicações em duas camadas. Nesta estrutura, a base de dados foi colocada em uma máquina específica, separada das máquinas que executavam as aplicações. Nessa abordagem, temos aplicativos instalados em estações clientes contendo toda a lógica da aplicação (clientes ricos ou gordos). Um grande problema neste modelo é o gerenciamento de versões pois, para cada alteração, os aplicativos precisam ser atualizados em todas as máquinas clientes.

### Aplicações em três camadas

Com o advento da Internet, houve um movimento para separar a lógica de negócio da interface com o usuário. A ideia é que os usuários da WEB possam acessar as mesmas aplicações sem ter que instalar estas aplicações em suas máquinas locais. Como a lógica do aplicativo, inicialmente contida no cliente rico, não mais reside na máquina do usuário, este tipo de cliente passou a ser chamado de cliente pobre ou magro (Thin Client). Neste modelo o aplicativo é movido para o servidor e um navegador web é usado como um cliente magro. O aplicativo é executado em servidores web com os quais o navegador web se comunica e gera o código HTML para ser exibido no cliente.

## Conclusão

No modelo 3 camadas, a lógica de apresentação esta separada em sua própria camada lógica e física. A separação em camadas lógicas torna os sistemas mais flexíveis, permitindo que as partes possam ser alteradas de forma independente. As funcionalidades da camada de negócio podem ser divididas em classes e essas classes podem ser agrupadas em pacotes ou componentes, reduzindo as dependências entre as classes e pacotes; podem ser reutilizadas por diferentes partes do aplicativo e até por aplicativos diferentes. O modelo de 3 camadas tornou-se a arquitetura padrão para sistemas corporativos com base na Web.