MVC e Arquitetura de 3 camadas

[b]Olá, pessoal!

De tanto ler materiais diversos e até mesmo aqui no GUJ, fique com uma dúvida.

É com relação a MVC e arquitetura de 3 camadas.

MVC é um padrão derivado da arquitetura de 3 camadas?

Onde que entra a arquitetura J2EE nessa história? A arquitetura J2EE usa MVC ?[/b]

[quote=ECO2004][b]Olá, pessoal!

De tanto ler materiais diversos e até mesmo aqui no GUJ, fique com uma dúvida.

É com relação a MVC e arquitetura de 3 camadas.

MVC é um padrão derivado da arquitetura de 3 camadas?

Onde que entra a arquitetura J2EE nessa história? A arquitetura J2EE usa MVC ?[/b][/quote]

MVC é um padrão de desenvolvimento de três camadas.

Model >>Camada Modelo
Onde vc terá classes com a modelagem (bean).
Ex: Classe usuario:

codUsuario;
nome;
cpf;

Gets e Seters<<

View >>Camada Apresentação
Jsp, XHTML…

Control >>Camada de Controle
Onde vai ficar o controle que liga a pagina (jsp, XHTML…) ao bean.

J2ee é Java Web (Java Enterprise edition) o padrão MVC é usado em diversos frameworks (Ex: Struts, Jsf).
Você pode desenvolver JavaWeb em 3 camadas ou não, mas fica mais dividido e seguro e organizado em MVC.

[quote=blaithe][quote=ECO2004][b]Olá, pessoal!

De tanto ler materiais diversos e até mesmo aqui no GUJ, fique com uma dúvida.

É com relação a MVC e arquitetura de 3 camadas.

MVC é um padrão derivado da arquitetura de 3 camadas?

Onde que entra a arquitetura J2EE nessa história? A arquitetura J2EE usa MVC ?[/b][/quote]

MVC é um padrão de desenvolvimento de três camadas.

Model >>Camada Modelo
Onde vc terá classes com a modelagem (bean).
Ex: Classe usuario:

codUsuario;
nome;
cpf;

Gets e Seters<<

View >>Camada Apresentação
Jsp, XHTML…

Control >>Camada de Controle
Onde vai ficar o controle que liga a pagina (jsp, XHTML…) ao bean.

J2ee é Java Web (Java Enterprise edition) o padrão MVC é usado em diversos frameworks (Ex: Struts, Jsf).
Você pode desenvolver JavaWeb em 3 camadas ou não, mas fica mais dividido e seguro e organizado em MVC.
[/quote]

[b]Obrigado pela resposta!

Uma coisa. Na arquitetura cliente/servidor, há também uma divisão em camadas: apresentação, lógica do negócio e SGBD. Com ela, a carga fica mais equilibrada. Li que uma arquitetura de 3 camadas possui vantagens sobre uma arquitetura cliente/servidor. Pelo que sei, essa divisão (que acabei de descrever) cliente/servidor é em 3 camadas. Você sabe o porquê da vantagem da 3 camadas sobre o cliente/servidor?[/b]

Cara isso e a mesma coisa que MVC. Só estão com nomes diferentes.

MVC é algo que foi criado no final da década de 70 pelo pessoal da Xerox PARC, com o objetivo de separar responsabilidades em aplicações desktop desenvolvidas em Smalltalk - http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

Hoje usamos MVC em contextos diferentes.

  • no Swing, por exemplo, o MVC é usado para separar as responsabilidades de renderização, tratamento de eventos e controle de dados em cada componente. Nesse caso, está claro que o MVC está atuando apenas na camada de apresentação;
  • em aplicações Java web, pode-se implementar MVC usando Servlets como controladores, JSP como visão e JavaBeans como modelo. Servlets e JSP são tecnologias da camada de apresentação, mas tenho dúvidas se podemos incluir os JavaBeans nessa camada também;
  • frameworks de apresentação, como Struts e JSF, utilizam o modelo MVC. No caso do JSF, o managed bean assume um papel misto de modelo e controlador, pois cuida do estado dos componentes (modelo) e influi também no fluxo das aplicações (controle);
  • saindo do Java, pergunto: e no caso do Ruby on Rails? O Rails é um framework MVC e, por ser full-stack, não podemos deduzir que ele está contido apenas na camada de apresentação.

Gente caaaalma. Cuidado com as respostas prontas.

Você pode usar MVC e programar com 5 camadas. Loucura? Não, completamente possível.

MVC refere-se a componentes.

É tudo questão de conceito.

Dêem uma olhada nesse artigo do Philip Calçado que exemplifica muito bem a diferença.

http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

Eu também confundia, é normal essa confusão.

[quote=javablue]Gente caaaalma. Cuidado com as respostas prontas.

Você pode usar MVC e programar com 5 camadas. Loucura? Não, completamente possível.

MVC refere-se a componentes.

É tudo questão de conceito.

Dêem uma olhada nesse artigo do Philip Calçado que exemplifica muito bem a diferença.

http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

Eu também confundia, é normal essa confusão.[/quote]
O objetivo do meu post foi justamente chamar a atenção pra duas coisas:

  • É errado deduzir que MVC e camadas sejam a mesma coisa;
  • A implementação do MVC pode variar de acordo com o contexto de sua utilização.

[quote=tnaires][quote=javablue]Gente caaaalma. Cuidado com as respostas prontas.

Você pode usar MVC e programar com 5 camadas. Loucura? Não, completamente possível.

MVC refere-se a componentes.

É tudo questão de conceito.

Dêem uma olhada nesse artigo do Philip Calçado que exemplifica muito bem a diferença.

http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

Eu também confundia, é normal essa confusão.[/quote]
O objetivo do meu post foi justamente chamar a atenção pra duas coisas:

  • É errado deduzir que MVC e camadas sejam a mesma coisa;
  • A implementação do MVC pode variar de acordo com o contexto de sua utilização.[/quote]

Sim sim, desculpe. Só vi seu post depois que postei o meu. :smiley:

Não não, desculpe se passei a impressão de que seu post foi inadequado, não foi a intenção.

O link que você postou foi uma excelente contribuição para o tópico. O Phillip foi o cara que fez muita gente do GUJ - inclusive eu - refletir sobre a forma correta de se aprender MVC.

aliás, esse deve ser um dos assuntos que causa mais confusão no nosso mundo, não canso de ver muito gente associando MVC com a divisão em 3 camadas, como vejo muita gente falando que não, que é apenas uma das maneiras possiveis de se fazer as camadas se “comunicarem”. Pensando na segunda, quais seriam as outras maneiras?

Dá uma lida no artigo que eu postei em cima. Mas basicamente o MVC divide em 3 “componentes”. Model, Controller e View.

Mas o Model, que é um componente, pode ter outras camadas internas, assim como a View. Controller é mais difícil ter mais de uma camada (não que seja impossível).

O Model por exemplo, pode ser divido em persistência e negócio. E até mais camadas dependendo da arquitetura e complexidade do sistema.

Pessoal estou com a mesma dúvida, em organizar o codig em MVC usando java server faces, vejam só:

CAMADA - VISÃO = MINHAS CLASSES JAVA


CAMADA - CONTROLE = MEUS MANAGER BEANS
Nessa camada que é tratada minha regra de negócio não é isso?


CAMADA DE PERSISTENCIA = MEUS DAOS
Faz a persistẽncia dos dados no Banco

É isso mesmo?

MVC não tem nada haver com a camadas

O design pattern Model-View-Controler , mais conhecido como MVC trata de uma solução para design de componentes que atuam dentro de uma MESMA camada , normalmente na de Cliente e/ou na de Apresentação. As outras camadas usam outros padrões. A de domínio utiliza ~principalmente os padrões Entity e Service e o de integração os padrões Mediator e Bridge.

veja o link - http://sergiotaborda.javabuilding.com/2009/11/mvc-e-camadas/

No caso do JSF ele ja implementa MVC entao não precisa ficar “encanado” isso já é pronto a unica coisa que vc vai implementar é o model que no JSF ele apenas define(“interface”), mais não implementa
veja o link - http://www.ibm.com/developerworks/web/library/wa-dsgnpatjsf/index.html

[b]Ninguém respondeu a minha pergunta sobre “arquitetura de 3 camadas tem vantagens sobre a arquitetura cliente servidor?”

Eu descrevi uma arrquitetura cliente/servidor em 3 camadas: apresentação, lógica do negócio e SGBD.

Assim, esse cliente/servidor não é 3 camadas? Para mim, é! Então, não sei o porquê de uma arquitetura de 3 camadas ser vantajosa à uma cliente/servidor.[/b]

[quote=ECO2004][b]Ninguém respondeu a minha pergunta sobre “arquitetura de 3 camadas tem vantagens sobre a arquitetura cliente servidor?”

Eu descrevi uma arrquitetura cliente/servidor em 3 camadas: apresentação, lógica do negócio e SGBD.

Assim, esse cliente/servidor não é 3 camadas? Para mim, é! Então, não sei o porquê de uma arquitetura de 3 camadas ser vantajosa à uma cliente/servidor.[/b][/quote]

Cara, presta atenção na sua pergunta, no título do tópico e no que foi respondido. Não adianta perguntar, sobre arquitetura 3 camadas e MVC se você não entendeu o conceito. E só a sua pergunta, já deu para ver que não foi atrás dos links que postamos e nem procurou no google, isso por si só, já é ruim.

Mas para não te deixar na mão ai vai: Arquitetura em camadas, é algo do desenvolvedor, para organizar o código e deixá-lo flexível com facilidade para futuras mudanças. Isso é transparente ao cliente. Se o seu código está desorganizado ou organizado pra ele não importa( quer dizer importa, porque se estiver desorganizado, vai ser difícil alterar o código e mais cara fica a manutenção), o importante pra ele é que funcione.

O que você quer dizer com arquitetura cliente/servidor? Toda aplicação WEB não é assim?

[quote=javablue][quote=ECO2004][b]Ninguém respondeu a minha pergunta sobre “arquitetura de 3 camadas tem vantagens sobre a arquitetura cliente servidor?”

Eu descrevi uma arrquitetura cliente/servidor em 3 camadas: apresentação, lógica do negócio e SGBD.

Assim, esse cliente/servidor não é 3 camadas? Para mim, é! Então, não sei o porquê de uma arquitetura de 3 camadas ser vantajosa à uma cliente/servidor.[/b][/quote]

Cara, presta atenção na sua pergunta, no título do tópico e no que foi respondido. Não adianta perguntar, sobre arquitetura 3 camadas e MVC se você não entendeu o conceito. E só a sua pergunta, já deu para ver que não foi atrás dos links que postamos e nem procurou no google, isso por si só, já é ruim.

Mas para não te deixar na mão ai vai: Arquitetura em camadas, é algo do desenvolvedor, para organizar o código e deixá-lo flexível com facilidade para futuras mudanças. Isso é transparente ao cliente. Se o seu código está desorganizado ou organizado pra ele não importa( quer dizer importa, porque se estiver desorganizado, vai ser difícil alterar o código e mais cara fica a manutenção), o importante pra ele é que funcione.

O que você quer dizer com arquitetura cliente/servidor? Toda aplicação WEB não é assim?
[/quote]

[b]Cara, você quem não prestou atenção. Eu sei o que é três camadas. Sei o que é MVC. Perguntei sobre arquitetura cliente/serivor e a vantagem de uma arquitetura de 3 camadas sobre ela, já que há uma arquitetura cliente/servidor (apresentação, logica do negócio, SGBD) em três camadas. Para mim, seria perguntar qual a vantagem de seis sobre meia dúzia, sacou?

Agora, respondendo a sua pergunta, há modelos de arquitetura cliente/servidor simples, em dois níveis, multi-nível, par-par e em três camadas…

[/b]

[quote=ECO2004][b]
MVC é um padrão derivado da arquitetura de 3 camadas?

Onde que entra a arquitetura J2EE nessa história? A arquitetura J2EE usa MVC ?[/b][/quote]

Logo se vê que você sabe mesmo a diferença.

Bom eu dei uma procurada no google, só para ficar claro alguns conceitos. Arquitetura 3 camadas, MVC e etc, é sobre COMO se desenvolve software. Você pode desenvolver assim em aplicações WEB, desktop, celular e qualquer outra coisa.

Arquitetura Cliente/Servidor, é a parte física o cliente acessa o servidor. E ai existem N formas de se fazer isso, algumas você descreveu como simples, par-par e etc.

Referência? http://pt.wikipedia.org/wiki/Cliente-servidor , http://www.criarweb.com/artigos/arquitetura-cliente-servidor.html , http://www.lume.ufrgs.br/handle/10183/6223

Tô pegando no teu pé sobre conceitos, porque a sua pergunta não faz muito sentido entende? Eu posso fazer uma aplicação totalmente desktop, sem acesso a servidor e usar a arquitetura de 3 camadas. E posso programar, sem nenhuma camada, e meu software ser cliente/servidor. Se você ver ninguém falou que a arquitetura de 3 camadas, melhora a carga ou performance de nada. Ela deixa o teu código mais organizado, mas performance e carga tem muito mais detalhes (o banco que você escolheu, a massa de dados dele, indíces de tabelas, consultas muito grandes, cache, clusterização, IO, pool de conexões, quantidade de usuários conectados ao mesmo tempo e mais uma série de coisas).

É sério, leia os links, entenda bem e poste as dúvidas. Só pelas perguntas que você faz, dá pra ver que você não leu muito a respeito. A gente só quer ajudar.

pessoalmente considero um erro olhar para MVC simplesmente como “separação em camadas”… deveria-se pensar em “separação em responsabilidades”…

pensa direito, você pensou em cliente servidor como 3 camadas, aliás até de uma forma mais básica, o javablue está certo em dizer que cliente servidor é fisico mesmo e que pode ser feito de n formas, essa visão “apresentação, logica do negócio, SGBD” é simplista e tem certos buracos, falta um controller por exemplo se você está pensando em MVC (ja que o primeiro seria o V e ous dois ultimos “fazem parte” do M, sendo que o segundo você poderia separar ai em outras camadas tb, colocar BOs, façades… etc, nem é este o caso).

melhor dar uma boa pesquisada sobre MVC, e da uma boa pesquisada também sobre o que seria “baixo acoplamento” e vai-se perceber melhor o por quê de separar dessa forma, em responsabilidades.

[b]Foi me feita uma pergunta sobre três camadas e sobre cliente/servidor:

“Escalabilidade e disponibilidade são vantagens da arquitetura três camadas em comparação à arquitetura cliente/servidor.”

Arquitetura cliente/servidor pode ser implementada em 3 camadas. Seis tem vantagem sobre meia dúzia??

Entenderam a minha dúvida?[/b]

Não, não entendi.

Acho que não tô sendo muito claro. Ou estamos usando termos diferentes, o título do tópico é sobre Arquitetura 3 camadas e MVC e isso já foi explicado aqui um zilhão de vezes. Já expliquei também que nada tem haver com Arquitetura 3 camadas com arquitetura cliente/servidor, uma é em relação ao software outro em relação a rede, hardware e etc.

Fica mais fácil você postar o link de onde tirou essa frase. De repente, a nomenclatura da sua referência sobre Arquitetura 3 camadas é outra e por isso a gente não consegue entender a sua dúvida.