MVC e Arquitetura de 3 camadas

31 respostas
E

[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]

31 Respostas

B

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]

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.

E

blaithe:
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]

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.

[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]

D

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

T

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.
J

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.

T

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.


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.
J

tnaires:
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.


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.

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

T

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.

W

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?

J

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.

W

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?

E

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

E

[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]

J

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]

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?

E

javablue:
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]

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?

[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]

J

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]

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.

M

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.

E

[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]

J

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.

J

É esse o link?

http://www.questoesdeconcursos.com.br/questoes/b0d69b4a-82

É questão de concurso? É essa?

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

PORQUE

Na arquitetura três camadas tanto o servidor de aplicação como o servidor de banco de dados podem ser instalados em uma ou várias máquinas.

Analisando as afirmações acima, conclui-se que

a) as duas afirmações são verdadeiras e a segunda justifica a primeira.

b) as duas afirmações são verdadeiras e a segunda não justifica a primeira.

c) a primeira afirmação é verdadeira e a segunda é falsa.

d) a primeira afirmação é falsa e a segunda é verdadeira.

e) as duas afirmações são falsas.

A primeira eu acho falsa…a segunda também. Mas não tenho certeza da segunda, pra mim, a escabilidade não tem haver com camadas e sim com as tecnologias que você usa e etc. Não é porque você usa 3 camadas que consegue escalar um servidor

E

javablue:
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.

Petrobrás - 02/2010

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

PORQUE

Na arquitetura três camadas tanto o servidor de aplicação
como o servidor de banco de dados podem ser instalados
em uma ou várias máquinas.

Analisando as afirmações acima, conclui-se que
(A) as duas afirmações são verdadeiras e a segunda justifica
a primeira.
(B) as duas afirmações são verdadeiras e a segunda não
justifica a primeira.
© a primeira afirmação é verdadeira e a segunda é falsa.
(D) a primeira afirmação é falsa e a segunda é verdadeira.
(E) as duas afirmações são falsas.

Resposta: A.

E

javablue:
É esse o link?

http://www.questoesdeconcursos.com.br/questoes/b0d69b4a-82

É questão de concurso? É essa?

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

PORQUE

Na arquitetura três camadas tanto o servidor de aplicação como o servidor de banco de dados podem ser instalados em uma ou várias máquinas.

Analisando as afirmações acima, conclui-se que

a) as duas afirmações são verdadeiras e a segunda justifica a primeira.

b) as duas afirmações são verdadeiras e a segunda não justifica a primeira.

c) a primeira afirmação é verdadeira e a segunda é falsa.

d) a primeira afirmação é falsa e a segunda é verdadeira.

e) as duas afirmações são falsas.

A primeira eu acho falsa…a segunda também. Mas não tenho certeza da segunda, pra mim, a escabilidade não tem haver com camadas e sim com as tecnologias que você usa e etc. Não é porque você usa 3 camadas que consegue escalar um servidor

Escalabilidade tem a ver sim, e muito. Você pode desenvolver, por exemplo, a tecnologia de banco de dados ser alterar as outras camadas. Você pode aumentar a capacidade do seu servidor, por exemplo. Isso é ser escalável. Cada camada pode ser desenvolvida, melhorada e expandida separadamente.

J

Você pode desenvolver em camadas, mas isso não quer dizer necessariamente que é escalável. Você precisa de outros fatores além desse. Você deve estar baseando sua nomenclatura baseado mais ou menos nisso?

http://www.dsc.ufcg.edu.br/~jacques/cursos/j2ee/html/intro/intro.htm

Se baseado nesse conceito, sim você está certo. Mas depende da referência. Foi o que eu falei, posso fazer um aplicativo desktop, com 3 camadas. E não tem nada de escalável nele.

As nossas definições eram diferentes, mas causou confusão por causa do MVC.

T

Acho que está havendo uma confusão aqui entre camadas físicas (tiers) e camadas lógicas (layers).

O link da Wikipedia sobre multitier architecture diz o seguinte:

Uma camada (layer) é uma divisão lógica da aplicação. Quando dividimos a aplicação em apresentação, negócios e persistência, estamos realizando a divisão em layers.

Agora podemos pegar, por exemplo, o servidor de banco de dados e colocar pra rodar em uma máquina diferente da que roda o servidor de aplicação. Aí estamos realizando a divisão em tiers.

Ambas as formas contribuem para a escalabilidade horizontal da aplicação, que implica em adicionar mais nós - ou computadores - ao sistema.

J

tnaires:
Acho que está havendo uma confusão aqui entre camadas físicas (tiers) e camadas lógicas (layers).

Isso explica muita coisa. Na conversa com o ECO2004, vi que estávamos falando de coisas diferentes. Mas não sabia a nomenclatura certa.

Valeu

E

tnaires:
Acho que está havendo uma confusão aqui entre camadas físicas (tiers) e camadas lógicas (layers).

O link da Wikipedia sobre multitier architecture diz o seguinte:

Uma camada (layer) é uma divisão lógica da aplicação. Quando dividimos a aplicação em apresentação, negócios e persistência, estamos realizando a divisão em layers.

Agora podemos pegar, por exemplo, o servidor de banco de dados e colocar pra rodar em uma máquina diferente da que roda o servidor de aplicação. Aí estamos realizando a divisão em tiers.

Ambas as formas contribuem para a escalabilidade horizontal da aplicação, que implica em adicionar mais nós - ou computadores - ao sistema.

Obrigado por ter solucionado um problema meu…a diferença entre layer e tier.

Arquitetura cliente/servidor, então, tem apenas tier e não layer?

T

Creio que a arquitetura cliente servidor impõe apenas que o servidor e o cliente estão necessariamente em computadores diferentes se comunicando através de uma rede, porém a divisão em camadas (físicas ou lógicas) do servidor é algo totalmente transparente para o cliente. O servidor pode fornecer vários serviços - http, ftp, e-mail, aplicações - e cada um desses serviços pode estar rodando em um nó diferente.

E

Creio que a arquitetura cliente servidor impõe apenas que o servidor e o cliente estão necessariamente em computadores diferentes se comunicando através de uma rede, porém a divisão em camadas (físicas ou lógicas) do servidor é algo totalmente transparente para o cliente. O servidor pode fornecer vários serviços - http, ftp, e-mail, aplicações - e cada um desses serviços pode estar rodando em um nó diferente.

Só tenho que discordar de uma coisa. Não necessariamente devem estar em computadores diferentes. Ex. localhost.

T

Verdade.

M

ECO2004:
javablue:
É esse o link?

http://www.questoesdeconcursos.com.br/questoes/b0d69b4a-82

É questão de concurso? É essa?

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

PORQUE

Na arquitetura três camadas tanto o servidor de aplicação como o servidor de banco de dados podem ser instalados em uma ou várias máquinas.

Analisando as afirmações acima, conclui-se que

a) as duas afirmações são verdadeiras e a segunda justifica a primeira.

b) as duas afirmações são verdadeiras e a segunda não justifica a primeira.

c) a primeira afirmação é verdadeira e a segunda é falsa.

d) a primeira afirmação é falsa e a segunda é verdadeira.

e) as duas afirmações são falsas.

A primeira eu acho falsa…a segunda também. Mas não tenho certeza da segunda, pra mim, a escabilidade não tem haver com camadas e sim com as tecnologias que você usa e etc. Não é porque você usa 3 camadas que consegue escalar um servidor

Escalabilidade tem a ver sim, e muito. Você pode desenvolver, por exemplo, a tecnologia de banco de dados ser alterar as outras camadas. Você pode aumentar a capacidade do seu servidor, por exemplo. Isso é ser escalável. Cada camada pode ser desenvolvida, melhorada e expandida separadamente.

não, você não precisa de camadas para fazer um software escalável. Você pode deixar configurável por exemplo a quantidade de threads ou outros recursos que ele irá usar tornando-o escalável, mesmo com uma arquitetura um tanto porca sem camada nenhuma… e pode fazer com camadas e inclusive focar o lado escalável da aplicação em uma determinada camada, é o recomendado, mas é possível fazer diferente…

M

Galera, estou com uma dúvida, qual a diferença entre arquitetura cliente/servidor e mvc ?

Criado 29 de junho de 2011
Ultima resposta 21 de mar. de 2014
Respostas 31
Participantes 10