MVC e Arquitetura de 3 camadas

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

É esse o link?

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

É questão de concurso? É essa?

[quote=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.

[/quote]

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

[quote=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.[/quote]

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.

[quote=javablue]É esse o link?

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

É questão de concurso? É essa?

[quote=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.

[/quote]

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

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.

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.

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.

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

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

[quote=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.[/quote]

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?

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.

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.[/quote]

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

Verdade.

[quote=ECO2004][quote=javablue]É esse o link?

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

É questão de concurso? É essa?

[quote=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.

[/quote]

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

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.[/quote]

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…

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