Martin Fowler demonstrando claramente:
A estratificação é uma das técnicas mais comuns usadas pelos projetistas de software para desmembrar um sistema de software complicado. Você vê isso nas arquiteturas de máquinas, onde as camadas descem de uma linguagem de programação com chamadas do sistema operacional para drivers de dispositivo e conjuntos de instruções da CPU, e para portas lógicas dentro dos chips. A rede possui FTP em camadas sobre o TCP, que está sobre o IP, sobre a Ethernet.
Ao pensar em um sistema em termos de camadas, você imagina os principais subsistemas do software organizados em alguma forma de camada de bolo, onde cada camada repousa sobre uma camada inferior. Nesse esquema, a camada superior usa vários serviços definidos pela camada inferior, mas a camada inferior não tem conhecimento da camada superior. Além disso, cada camada geralmente oculta suas camadas inferiores das camadas acima, portanto, a camada 4 usa os serviços da camada 3, que utiliza os serviços da camada 2, mas a camada 4 não tem conhecimento da camada 2. (Nem todas as arquiteturas de camadas são opacas como esta , mas a maioria é - ou melhor, a maioria é opaca.)
Dividir um sistema em camadas tem vários benefícios importantes.
• Você pode entender uma única camada como um todo coerente sem saber muito sobre as outras camadas. Você pode entender como criar um serviço FTP sobre o TCP sem conhecer os detalhes de como a Ethernet funciona.
• Você pode substituir camadas por implementações alternativas dos mesmos serviços básicos. Um serviço de FTP pode ser executado sem alterações por Ethernet, PPP ou qualquer outra empresa de cabo.
• Você minimiza as dependências entre as camadas. Se a empresa de cabo mudar seu sistema físico de transmissão, desde que faça o IP funcionar, não precisaremos alterar nosso serviço de FTP.
• Camadas são bons locais para padronização. TCP e IP são padrões porque definem como suas camadas devem operar.
• Depois de criar uma camada, você pode usá-la para muitos serviços de nível superior. Assim, o TCP / IP é usado por FTP, telnet, SSH e HTTP. Caso contrário, todos esses protocolos de nível superior teriam que escrever seus próprios protocolos de nível inferior. Da biblioteca de Kyle Geoffrey Passarelli
A estratificação é uma técnica importante, mas há desvantagens.
• Camadas encapsulam algumas, mas não todas, coisas bem. Como resultado, você às vezes recebe alterações em cascata. O exemplo clássico disso em um aplicativo corporativo em camadas é adicionar um campo que precisa ser exibido na interface do usuário, deve estar no banco de dados e, portanto, deve ser adicionado a todas as camadas intermediárias.
• Camadas extras podem prejudicar o desempenho. Em todas as camadas, as coisas normalmente precisam ser transformadas de uma representação para outra. No entanto, o encapsulamento de uma função subjacente geralmente oferece ganhos de eficiência que mais do que compensam. Uma camada que controla as transações pode ser otimizada e, em seguida, tornar tudo mais rápido. Mas a parte mais difícil de uma arquitetura em camadas é decidir quais camadas ter e qual deve ser a responsabilidade de cada camada.