Diferença de MVC para 3 camadas

Galera estou iniciando no Java e comecei a dar uma lida sobre o Padrão MVC e o modelo 3 camadas. Dei uma lida no post http://www.guj.com.br/posts/list/15/14068.java em que alguns usuários tentam diferenciar um do outro mas não consegui compreender. Perguntei a um dos responsáveis pela arquitetura do projeto que eu participo que segue o padrão MVC e ele me disse que não existe diferença mas no tópico citado anteriormente dizem que existe. Alguém poderia dar uma explicada e citar exemplo se realmente existir diferença?

Abraços

Obs.: não postei no outro para não desenterrar tópico antigo, não sei se fiz certo

Basicamente o MVC se preocupa como vc vai dividir suas atividades no servidor, seja com beans, servlets, classes… tudo baseado na model, view e controller…
está ligado mais com organização e modularização da sua aplicação… do que com o que ela faz

3 tier é apenas o fato de dividir (objetivamente) como uma aplicação funciona, como o cara falou…
persistência, negócio, apresentação

Meio complicado de entender…

pra mim o MVC é um padrão que divide o ponto de interação do sistema afim de isolar suas tecnologias visando uma maior portabilidade e melhor manutenção e o 3-tier…

…bem, também(!?) hehe

Eu consegui compreender o MVC se aquilo que eu disse acima estiver certo mas o 3-tier ainda está um pouco nebuloso… :roll:

Este artigo do Phillip Calçado explica bem a diferença.
http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

EDIT: no java.net tem este artigo também, que explica a história do MVC desde seu propósito inicial até a forma como o conhecemos hoje.
http://today.java.net/pub/a/today/2003/12/11/mvc.html

Não sei se o que vou dizer é 100% correto tecnicamente, mas é o modo como entendo essa diferença e acredito que seja o modo mais simples:

  • Como você já sabe bem, o modelo de camadas separa em Apresentação, Negócio e Persistência.

  • Já o MVC… fica todo dentro da camada de apresentação. Ou seja, é uma divisão de classes/responsabilidades dessa camada apenas, sendo que o Model é a “ponte” para a camada de negócio (e consequentemente para a de persistência). Do ponto de vista da View e do Controller, o Model é uma caixinha que contém as 2 camadas de baixo.

Correto, sendo que o MVC dá nome aos bois, ou seja, você está dizendo explicitamente quais são esses pontos de interação. Quando você fala de camadas, está apenas falando de níveis de abstração de uma mesma informação, ou seja, é um conceito mais genérico. Por exemplo, um registro no banco de dados, que depois se torna um objeto Java em outra camada, que depois se torna dados formatados numa JSP. São as mesmas informações, mas em camadas diferentes.

Eu costumo ver o MVC da seguinte forma: o Model é simplesmente o seu modelo, ou domínio, ou regras de negócio. A View é a apresentação desse modelo ao usuário. Você poderia ter views diferentes para o mesmo modelo: poderia haver uma interface web usando JSP como view, e outra desktop usando Swing, por exemplo. Separar as responsabilidades conforme o MVC ajuda a implementar esse tipo de coisa.

Porém, a View e o Model por si só não funcionam: se você desenhar uma tela para adicionar um cliente, e a classe de domínio correspondente, isso por si só não vai permitir que você realize a operação. É preciso algo que realmente reaja aos eventos da View, manipulando as regras de negócio para devolver um resultado. É aí que entra o Controller, que nada mais é do que o cara que “dá vida” à View e ao Model. Numa aplicação desktop, fazem parte dele os manipuladores de eventos por exemplo, já numa aplicação web poderíamos citar os servlets e as actions dos frameworks. Enfim, gosto de pensar no Controller como tudo que manipula ou “dá vida” à View e ao Model.

Quanto à MVC ser camadas ou não, no meu entender a View é um nível de abstração do Model. Uma tela de cadastro de produto é a interface para acessa a classe de domíno, que depois vai se tornar um registro no banco de dados. Em todas as fases estamos falando da mesma informação, o produto, mas em níveis de abstração, ou camadas, diferentes. Já o Controller eu não gosto muito, de acordo com o exposto, de pensar como camada.

Uma observação: as classes de persistência no MVC se encaixariam no Model ou ainda, abaixo dele, como uma camada se suporte.

Boaaa renatosilva

:thumbup:

Valeu galera,

deu uma boa esclarecida. Porém confesso que ainda preciso ler muito sobre assunto.

Abraços…

[quote=lucas_mnzs]Galera estou iniciando no Java e comecei a dar uma lida sobre o Padrão MVC e o modelo 3 camadas. Dei uma lida no post http://www.guj.com.br/posts/list/15/14068.java em que alguns usuários tentam diferenciar um do outro mas não consegui compreender. Perguntei a um dos responsáveis pela arquitetura do projeto que eu participo que segue o padrão MVC e ele me disse que não existe diferença mas no tópico citado anteriormente dizem que existe. Alguém poderia dar uma explicada e citar exemplo se realmente existir diferença?
[/quote]

A diferença é gritante.
MVC é um padrão para estruturar as classes de 1 camada. Ele se aplica a uma das 3 camadas (normalmente a de apresentação mais perto do usuário)

MVC não é separação de camadas. qualquer um que diga o contrário ou não saiba isto não sabe do que está a falar.

Model-view-controller (MVC) é um padrão de arquitetura de software.
Visa separar as resposabilidades, apresentação, controle e modelo, dessa forma se você muda alguma coisa na tela não afeta controle e modelo. Eles deveriam ser independentes e a comunicação feita através de interfaces. Se você muda algo em modelo e se vê obrigado a mudar mais coisa na aplicação, você deveria rever seu projeto.
Um exemplo bobo:

Classe aluno

[code]public class AlunoDao{

public void adiciona(Aluno aluno){
Aqui dentro você pode mudar na boa, pois o importante é a interface
adiciona(), pois ela será usada dentro do controle, se você faz a cagada
de liberar acesso a atributos, ou depender de acessar direto a classe AlunoDao
para iniciar variáveis ou passar parâmetros, vai se estrepar quando mudar a
implementação, pois terá que mudar fora da classe também!
}
}[/code]

Nós devemos nos preocupar com o serviço que método nos presta, não como ele é implementado, isso é Orientação a Objeto, ou para ser mais preciso encapsulamento. Eu quero instanciar AlunoDao e sem medo de ser feliz passar meu objeto já populado Aluno aluno.
Lembra daquelas funções horríveis de pascal???

function adiciona(nome,endereco,matricula,:string):boolean

Nossa rsrsrsr que nojo…
Muito mais alto nível Orientação a Objeto, acho que nem sei mais programar de outro jeito!
Abraços galera!

Site:http://www.jorgeluis.eti.br
Blog:http://blog.jorgeluis.eti.br
E-mail:contato@jorgeluis.eti.br

Meu caro, falou e não argumentou/sustentou seu ponto de vista em relação ao assunto.
Vamos tentar esclarecer para agente que ta aprendendo, ficariamos agradecidos.
Já que DISCORDA diga porque!!! ASSIM COMO TODOS FIZERAM :wink:
Nós aprendizes, correremos atráz para chegar a conclusão mais correta ao assunto abordado.

Poderia falar mais a respeito?
Muito obrigado pela ajuda desde já!

:thumbup:

[quote= ][quote=sergiotaborda]
MVC não é separação de camadas. qualquer um que diga o contrário ou não saiba isto não sabe do que está a falar.
[/quote]

Meu caro, falou e não argumentou/sustentou seu ponto de vista em relação ao assunto.
Vamos tentar esclarecer para agente que ta aprendendo, ficariamos agradecidos.
Já que DISCORDA diga porque!!! ASSIM COMO TODOS FIZERAM :wink:
Nós aprendizes, correremos atráz para chegar a conclusão mais correta ao assunto abordado.

Poderia falar mais a respeito?
Muito obrigado pela ajuda desde já!

:thumbup:
[/quote]

Realmente, vc tem a mesma opinião que a minha. Eu tive dificuldade de entender pois na maioria dos tópicos que li não citaram-se exemplos ou houve apenas comentários como o do nosso amigo. Agora nesse tópico ficou bem mais claro…

Valeu galera,

Abraços

[quote=neeryck][quote=sergiotaborda]
MVC não é separação de camadas. qualquer um que diga o contrário ou não saiba isto não sabe do que está a falar.
[/quote]

Meu caro, falou e não argumentou/sustentou seu ponto de vista em relação ao assunto.
[/quote]

Na realidade estou farto de fazer isso nos N topicos sobre a mesma coisa. Procure no google ou na pesquisa do google os outros topicos onde isso é abordado.

Este topico está no forum de java avançado. Para entender as coisas é necessário um nivel minimo de dominio de OO e java para se entender. A explicação mais simples possivel está naquela frase que citou. Quer mais detalhes ? estude o assunto.

Não discordo de nada porque não é uma questão de opinião.

MVC é simples. Tem muito material na web explicando.
O que é difícil é entender que MVC é diferente de separação em camadas.

Camada é um elemento arquitetural genérico. Veja o exemplo do cubo.
Exemplos de Camada (no texto chamado Andar que é um nome menos dubio) são Cliente, Apresentação , Dominio , Integração e Recursos. Cada andar tem um propósito unico e bem definido no sistema. Para concretizar cada um deles são usados objetos com responsabilidades , usos e técnicas diferentes. Por exemplo, em Resursos é muito usado bando de dados e arquivos. Estas coisas não são propriamente “objetos” então precisamos usar coisas como JDBC e hibernate na camada de integração.

O MVC é um padrão para interfaces com o usuário , normalmente interfaces gráficas. Portanto é uma tecnica utilizada principalmente na camada Apresentação. Às vezes em Cliente tb. Para entenderem : Cliente seria um browser, por exemplo, ou uma aplicação swing. Apresentação seria a parte de servlets/JSF. JSF é baseado fortemente em MVC assim como Swing. Servlets é uma tecnologia mais baixa para comunicação com o browser que não estabelece nenhum protocolo especial alem do http. Por isso vários frameworks - ditos MVC - vieram colmatar essa deficiencia apresentando facilidades para a utilização daquilo que se chama do modelo 2. Neste modelo o request é direcionada a um servlet. Ele faz todos os processamentos e envia a um jsp para renderização da resposta. Isto é um tipo de MVC , o jsp e tudo nele são a view, o servlet e tudo relacionado a ele, o controler, e os objetos com os dados que viajam entre o servlet e o jsp são o modelo porque no modelo 2 não existe um mecanismo de eventos como no MVC “verdadeiro”.

O que realmente interessa:

O restante passou longe do escopo!! :wink:

Vlw!!

Mais material sobre MVC pode ser encontrado em http://www.guj.com.br/posts/list/129277.java OK? Valew.