djemacao:
analyser:
Como foi muito bem falado pelo “Shoes”, Camada e MVC são diferentes, tenham isso na cabeça, e Camada tb difere entre “Tier” e “Layer”, uma coisa que acaba de vez com a confusão de camada e MVC é simples, eu posso ter MVC em apenas UMA camada, pronto, a partir disso esta claro que MVC é diferente de CAMADAS. Sugiro ler o artigo do Shoes citado neste post (fragmental) e ler novamente a reposta do Sergio Taborda.
Um problema destes conceitos é o seguinte, a maioria tem o conceito errado sobre MVC e Camadas, então como a maioria explica errado acabamos achando que a minoria que explica certo esta errada.
[]s
Camada ou não camada? Layer ou tier? Bom, vamos aos fatos. Falando de Java? Leiam o BluePrints:
http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/app-arch/app-arch2.html
Podemos SIM, dizer que cada parte do MVC é uma camada (layer), ou traduz de outra forma agora?
Sim.
Em inglês os termos tier e layer são usados indistinvamente e normalmente tier se refere a algo fisico enquando layer a algo abstrato. Essa noção de que as coisas são empilhadas como camadas de bolo têm 3 niveis de prespectiva. veja o cubo arquitetural. O cubo mostra duas dimenções em que ha empilhamento. De baixo para cima vc tem camadas que conectão a aplicação com o hardware. Estes elementos são chamados plataformas (platform). A plataforma java é uma plataforma virtual (penultimo de baixo para cima).
Da esquerda para a direita temos empilhamento logico. Se rodar o cubo verá que é um empilhamento.
Os elementos deste empilhamento são chamados andares (store). A terceira dimensão não é empilhada , são pilares cada um segura a aplicação por si mesmo.
O cubo forma um nodo. Nodos são conjuntos de andares e plataformas. Normalmente são equivalentes a máquinas (com o seu hardware, OS, jvm, etc…) mas podem haver vários nodos numa máquina fisica.
As palavras tier e layer podem significar nodos ou andares dependendo do contexto.
3-layer-design = design em 3 camadas => design em 3 andares. (design é coisa do ambito logico)
3-tier-arquitectura = arquitetura em 3 nodos
multi-tier-platform = plataforma multi-camada : aqui a palavra “camada” substitui tanto nodo quando andar porque se quer dizer que a plataforma suporta ambos.
è por isso que na escola nos ensinam a avaliar e entender o contexto, porque as palavras por si mesmas podem não ter significados objetivos (unicos)
Andar (store), Plataforma (platform) e Nodo (node) são melhores palavras porque seu significado não é ambiguo. Com esta nomenclatura “camada” significa “conjunto de componentes” e é equivalente a pacotes ou pedaços da API que trabalham num certo proposito.
MVC é um padrão de desenho para 1 andar em 1 nodo. Não é uma nomenclatura para os andares , nem os nodos.
“Modelo” não é o Dominio , como alguem falou algures nos trezentos topicos sobre MVC. “Modelo” é a parte que conversa com o Dominio. “View” Não é o que o usuário vê, mas aqui que aplicação interpreta como sendo o que o usuário interage. system.out e system.in podem ser a view. Não necessariamente a view é gráfica. A interface gráfica, em si, é um andar (o “cliente”) e pode ou não usar MVC.
Aplicações modernas , sobretudo em java separam-se em 5 andares : Cliente, Apresentação, Negocio, Integração e Recursos.
Cliente = A interface gráfica (algo desktop em swing , awt ou swt ou um browser)
Apresentação = a parte que é consultada pelo (model) do cliente. Ea media a interface grafica e o negocio. É responsável pelas famosas “logicas de tela”.
Negocio = As regras de dominio propriamente ditas. entidades, serviços, etc…
Integração= contém logicas que permitem à aplicação comunicar com outras aplicações. O classico é o acesso a banco de dados e a arquivos.mas coisas como cnab, webservices, ETF estariam aqui.
Recursos = recursos usados , o bando de dados em si mesmo (não o SGDB) , arquivos de salvaguarda, logs, qualquer coisa que a aplicação necessite para funcionar que pode ser produzida por ela ou não.
Numa aplicação web tipica:
Cliente = Browser
Apresentação = JSF ou Struts ou Spring MVC ou qq "framework web"
Negocio = Serviços, entidades e outras classes de dominio (validação, specification, value object , etc…)
Integração = Hibernate , qq framework ORM , JDBC puro , leitura de xml, etc…
Recursos = Banco de Dados e arquivos de configuração