As pessoas costumam afirmar que seguem uma 'arquitetura de três camadas (ou n camadas)' e, às vezes, afirmam estar mudando para um modelo de domínio. Mas eu realmente nunca entendi o que é essa mítica 'arquitetura de três camadas'. Parece não ter uma definição formal. Embora existam inúmeras referências e exemplos que explicam e demonstram o padrão do Modelo de Domínio, qualquer referência a três camadas sugere que você deve separar seu código em UI, Business Logic e Data Access Layers. E isso é tudo o que eles parecem dizer.
O que acho particularmente estranho é que, para mim, o Modelo de Domínio é a personificação perfeita desse paradigma de três camadas. os arquivos ORM e de mapeamento são a camada de acesso a dados, o domínio é a lógica de negócios e a interface do usuário é, bem, a interface do usuário. Então, por que as pessoas falam como se fosse algo novo e diferente, e algo para o qual deveriam mudar?
Antes de eu ver pessoas implementando o Modelo de Domínio, a maioria dos aplicativos era de UIs acessando procedimentos armazenados com a lógica dividida na UI e nos SPs. Às vezes, havia alguns assemblies chamados 'UI', 'BLL' e 'DLL', mas geralmente eram apenas mediadores entre as UIs e os SPs, deixando mais lugares para a lógica ser aleatoriamente distribuída.
Então, o que é essa arquitetura mítica de "três camadas"? Existe mesmo? e se sim, onde estão alguns exemplos disso implementados bem?
fonte