Em arquitetura de sistemas, é comum a gente ver artigos que falam sobre as layers, separando em MVC ou Apresentação, negócios e persistência.
Porém, há uma camada que vejo um aqui, outro acolá falar dela, mas não econtro nenhum documento explicando melhor seu conceito. A camada de aplicação.
Sei que seria uma camada entre apresentação e negócios, mas o que exatamente estaria nela? Que tipo de componente posso considerar próprio da camada de aplicação? Como saber separar certo apresentação de aplicação e essa de negócios?
Grato.
A camada de aplicação é uma fina camada que não contém regras de negócio, apenas coordena as tarefas e pode delegá-las para o conjunto de objetos da camada logo abaixo - o domínio, no caso. Eu costumo usar essa camada para implementar funcionalidades como transação e logging.
Seria por acaso onde eu colocaria padrões de fachada (façades) por exemplo? E os services da vida estariam aí também?
E os controllers da vida? Servlets ?
Estou entendendo bem, ou em algum aspecto aí estou pensando errado?
Grato!
É um assunto delicado, pois compreende as vezes o mesmo conceito mas sob diferentes óticas conforme o autor. Simplificando ao máximo, Application Layer do Evans é mais ou menos o Service Layer do Fowler.
Tem algum material de referência pra você se basear:
http://www.guj.com.br/java/72560-application-layerservicelayer--serviceddd---eric-evans-e-martin-fowler
Um post do Fowler que fala sobre este assunto:
Tem este post antigo do Shoes sobre seu artigo na MJ(eu tenho esta revista guardada em casa, vou procurar e depois posto mais informações):
http://www.fragmental.com.br/wiki/index.php?title=Arquitetura_de_Camadas_em_Java_EE
Minha sugestão: construa seu software de forma adaptativa, pense em uma arquitetura mínima, depois incremente e sofistique-a conforme necessário. A gente as vezes quer construir um software com a arquitetura perfeita e o estado-da-arte em design mas isto não existe. São os conceitos mais simples que valem mais.
Espero ter ajudado