[quote=leonardogamba]Olá pessoal, estou olhando separação de camadas ultimamente sempre que posso, já que não última vez que perguntei aqui parece que fiz uma mistureba de conceitos que gerou uma guerra entre usuário aqui no forum rs.
Básicamente o que entendi é que para uma aplicação simples(que é o que eu pretendo fazer) são suficientes 5 camadas.
Cliente - que é basicamente o que o cliente verá em sua tela(no meu caso as páginas jsf/xhtml e arquivos css)
[/quote]
Sim, mas o javascript tb entra aqui, e se usar jquery isso tb é cliente
Apresentação não é bem isso. ManagedBeans é de client ( se jsf é client , managed é da mesma camada)
A apresentação tem que ser independente do cliente ( a camada de baixo não vê a de cima). normalmente as pessoas não usam esta camada. e chamam o dominio diratamente do cliente.
Coisas como struts , vraptor etc, estão na camada cliente. É que no caso do web o cliente tem duas “partes”, uma que roda no servidor e outra que roda no browser, mas o servidor tem que enviar para o bowser a parte que roda lá. Tudo isto e´a camada cliente no servidor.
A apresentação deveria ser uma camada que não depende da tecnologia do cliente e que vc pode usar em outros clientes. por exemplo se vc mudar de web para swing, a camada de apresentação ainda deveria ser a mesma. Ela contém as regras de navegação.
As regras de negocio não existem como objetos. Os objetos desta camada são as entidades e objetos de valor associados, os serviços, os validadores e os repositórios (não os daos, temos n threads no forum sobre a diferença) .
Os serviços são por natureza coisas que se compoem (aliás como bons componentes que devem ser). logo se vc não usa JEE com CDI, o Spring é muito util. Ele é muito util em todas as camadas, na realidade, mas especialmente nesta.
Sim, mas a integração é mais que isso. Se vc acessa um File, isso é integração. Se vc acessa um WS é integração. Se vc usa OAuth é integração, etc… integração é sempre que vc precisar de coisas fora da sua VM.
Se vc tiver um mecanismo de upload, por exemplo, vai precisar manipular o arquivo , e de alguma forma colocá-lo no disco, isso é integração. Repare que este código irá correr muito perto do Cliente.
Se vc tiver de enviar email, vc vai querer ter um MailService, esse cara está na camada de integração , sendo acessado pelo Dominio.
Não é bem os dados. É mais o SGBD, os protocolos, a I/O, etc…
[/quote]
As camadas podem ser mais finas ou mais grossas conforme. A de apresentação normalmente é inexistente a menos que haja um grande esforço para isso. A de dominio e cliente serão as maiores.
Existem duas formas de empilhar camadas. Em uma a camada de cima só pode comunicar com a camada imediatamente a seguir. Isto é usado no TCP, por exemplo.
A outra é que a camada de cima pode acessar qualquer camada de baixo. Isto é mais perigoso e pode realmente levar ao conceito de “nenhuma camada”.
O que não pode acontece nunca é a camada de baixo depender da de cima. Isto tb é normalmente muito violado (por exemplo, usando os entibies na camada de integração)
Então, existem trade-offs mais sutis na hora de implementar, e é bom que vc tenha as diretrizes do que vc aceita e não aceita logo à partida, caso contrário é um vale-tudo e a sua ideia de estrutrua se perde.