Arquitetura MVC vs. camada n

142

Eu queria saber qual é exatamente a diferença entre MVC (que é um padrão arquitetural) e uma arquitetura de n camadas para um aplicativo. Eu procurei, mas não consegui encontrar uma explicação simples. Pode ser que eu seja um pouco ingênuo nos conceitos do MVC, portanto, se alguém puder explicar a diferença, seria ótimo.

Felicidades

Arnkrishn
fonte

Respostas:

94

A arquitetura de camada N geralmente possui cada camada separada pela rede. Ou seja, a camada de apresentação está em alguns servidores da Web; depois, ele conversa com servidores de aplicativos de back-end pela rede para obter lógica de negócios; depois, com um servidor de banco de dados, novamente pela rede, e talvez o servidor de aplicativos também chame alguns serviços remotos ( diga Authorize.net para processamento de pagamentos).

MVC é um padrão de design de programação em que diferentes partes do código são responsáveis ​​por representar o Model, View e controller em algum aplicativo. Essas duas coisas estão relacionadas porque, por exemplo, a camada Modelo pode ter uma implementação interna que chama um banco de dados para armazenar e recuperar dados. O controlador pode residir no servidor da web e chamar remotamente appservers para recuperar dados. O MVC abstrai os detalhes de como a arquitetura de um aplicativo é implementada.

A camada N refere-se apenas à estrutura física de uma implementação. Esses dois às vezes são confusos porque um design MVC geralmente é implementado usando uma arquitetura de camada N.

Zak
fonte
56
N-camada também é um padrão de design; você não precisa de 3 servidores para criar um sistema de 3 camadas; na verdade, é possível fazer um sistema de n camadas usando um único arquivo, separando cada camada por um conceito conceitual.
magallanes
6
A camada basicamente implica que uma comunicação entre processos está ocorrendo Geralmente através de um link de rede. Não concordo que um fluxo de design de código em processo (e muito menos no mesmo arquivo) constitua uma abordagem de design em camadas. Claro que isso é IMHO. "Servidor" implica que a máquina pode executar vários processos na mesma caixa; e eles provavelmente ainda podem falar na rede "localhost".
Zak
2
Todos os formatos discutidos são exemplos de designs de 3 camadas. Não confunda a diferença entre uma camada e uma camada. É verdade que você pode executar mais de uma camada em um mahcine físico (por exemplo, você divide um grande servidor por meio de hipervisores), mas o ponto aqui é que a N-camada alude a um salto de rede física (por exemplo, TCP / IP). Localmente, você seria mais eficiente em usar pipes nomeados, mas, novamente, se você executar no mesmo sistema, estará competindo por memória e poder de processamento. Todos esses são os motivos para considerar o isolamento da apresentação, da lógica de negócios e do acesso a dados e do banco de dados em máquinas diferentes.
Zack Jannsen 19/09/12
1
Eu recomendaria quem lê esta questão para ler outras respostas, esta resposta é imprecisa
keisar
@magallanes, Vá com 'Zak', primeiro precisamos esclarecer a diferença entre camadas e camadas Aqui é muito bom artigo codeproject em que não há explicação clara
IRF
42

Se um design de três camadas fosse assim:

Client <-> Middle <-> Data

o padrão do MVC seria:

     Middle
     ^    |
     |    v
Client <- Data

Significa que:

  • no equivalente em três camadas, a comunicação entre as camadas é bidirecional e sempre passa pela camada intermediária
  • no equivalente MVC, a comunicação é unidirecional ; poderíamos dizer que cada "camada" é atualizada pela da esquerda e, por sua vez, atualiza a da direita - onde "esquerda" e "direita" são meramente ilustrativas

O PS Client seria o View e o meio o Controller

vazio
fonte
13
no MVC o modelo pode interagir diretamente com o cliente (ver) ??? Acho que não !
precisa saber é o seguinte
6
@Alaa, eu concordo e é por isso que acho que está se referindo ao fluxo de dados. Atualização: Acabei de fazer o check-in na Wikipedia e o Modelo pode interagir com o View através de observadores (não diretamente).
vazio
1
No MVC: a arquitetura MVC é triangular: a visualização envia atualizações para o controlador, o controlador atualiza o modelo e a visualização é atualizada diretamente a partir do modelo In Three Tier: Uma arquitetura de três camadas é a camada do cliente que nunca se comunica diretamente com a camada de dados em um modelo de três camadas toda a comunicação deve passar pela camada intermediária
ketan Italiya
1
Aqui, se Middle é um controlador, a comunicação entre Middle, Client e Middle, Data é bidirecional e não unidirecional, conforme descrito em ans .. O controlador passa os dados para o modelo e o modelo retorna os dados atualizados para o controlador, que os retorna ao navegador. depois de passar pela vista.
Dragon
30

É o que diz sobre a arquitetura de n camadas

À primeira vista, as três camadas podem parecer semelhantes ao conceito MVC (Model View Controller); no entanto, topologicamente eles são diferentes. Uma regra fundamental em uma arquitetura de três camadas é que a camada do cliente nunca se comunica diretamente com a camada de dados; em um modelo de três camadas, toda a comunicação deve passar pela camada de middleware. Conceitualmente, a arquitetura de três camadas é linear. No entanto, a arquitetura MVC é triangular: o View envia atualizações para o Controller, o Controller atualiza o Model e o View é atualizado diretamente do Model.

Xinus
fonte
11
Parece bom, mas não acredito que "o View seja atualizado diretamente do modelo" seja uma boa idéia. Não faz sentido usar o Controller para atualizações e inserções, mas não para seleções e filtros, e não vejo o ponto de separação de preocupações apenas para vincular a visualização ao modelo! Conclusão - MVC é outro daqueles ofuscamentos criados por .... adivinhe. Não me lembro de que as três camadas estejam limitadas à "arquitetura do sistema" ou ao "design do aplicativo". O conceito central é a separação de preocupações .
Sam
1
Isso dependeria do que você está fazendo. Um aplicativo MVC para um aplicativo iOS (que provavelmente não permitiria que a visualização fosse atualizada diretamente do Modelo) será diferente de um aplicativo Web (o que pode). MVC é um paradigma, não uma maneira absoluta de fazer as coisas.
precisa
2
@ Sam concordo totalmente. Muitos jargões para um conceito intuitivo.
smwikipedia
1
parece bom, não funciona. A Wikipedia não é a fonte definitiva da verdade #
ACV
É a maneira como você interpretar a verdade, e novamente isso depende de quais são seus objetivos
Xinus
17

A única semelhança é que os dois padrões têm três caixas em seus diagramas. Fundamentalmente, eles são completamente diferentes em seus usos. De fato, geralmente não é uma escolha entre qual padrão usar, mas ambos podem ser usados ​​em conjunto de maneira prejudicial. Aqui está uma boa comparação dos dois: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

allthingscs
fonte
3
Acho que essa é de longe a melhor resposta, especialmente porque o MVC está realmente focado na interface do usuário e pode ser sua camada de interface do usuário em um design de 3 camadas. O diagrama no link demonstra isso muito bem.
Alex
5

Uma regra fundamental na arquitetura de três camadas é que a camada do cliente nunca se comunica diretamente com a camada de dados; em um modelo de três camadas, toda a comunicação deve passar pela camada de middleware.

É arquitetura de liner. Isso aborda a questão de como passar informações entre um usuário e um banco de dados. Onde como MVC é uma arquitetura triangular: o View envia atualizações para o Controller, o Controller atualiza o Model e o View é atualizado diretamente do Model. Isso aborda questões de como uma interface do usuário gerencia os componentes na tela.

pooja gupta
fonte
5

O @Cherry Middle ware funciona mais como um manipulador de solicitações ou redirecionador no MVC Pattern.

Eu gostaria de explicar um pouco sobre o MVC. De acordo comigo, o Model View Controller funciona assim.

  1. O cliente inicia a sessão solicitando qualquer serviço.
  2. Esta solicitação é recebida e tratada pelo Controller (manipulador de solicitações, redirecionador etc.)
  3. O controlador processa uma informação básica sobre a solicitação e redireciona-a para o Modelo relevante, que pode preencher a solicitação de dados.
  4. O modelo preenche a solicitação de acordo com os parâmetros passados ​​pelo Controller e envia de volta os resultados ao Controller. (Nota: Aqui, eu gostaria de esclarecer que os dados não são retornados diretamente ao cliente na verdadeira arquitetura MVC, mas são preenchidos e retornados ao controlador.)
  5. Controlador do que enviar esses dados para View (Client).
  6. O cliente tem o serviço solicitado à sua frente.

Isso é tudo sobre o MVC que eu sei.

Aqeel Ahmad
fonte
1
Eu acho que, como dito acima, o MVC é triangular, então o View às vezes pode conversar diretamente com o Model e vice-versa, conforme explicado neste documento: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche
5

Faça uma pausa. E não se restrinja a certos padrões ao resolver problemas do mundo real. Lembre-se de alguns princípios gerais, um dos quais é a SEPARAÇÃO DE PREOCUPAÇÕES .

smwikipedia
fonte
4

Além de linear, outra grande diferença que não foi enfatizada o suficiente aqui é que, no modelo de N camadas, N não é necessariamente de três camadas! Geralmente, é implementado como três camadas (apresentação, aplicativo, dados), com a camada intermediária tendo duas sub-camadas (lógica de negócios e acesso a dados). Além disso, o modelo no MVC pode conter dados e lógica de negócios para manipulação de dados, enquanto eles estariam em camadas separadas na n-camada.

Alkema
fonte
3

Uma arquitetura de N camadas é melhor definida usando um diagrama de implantação.

Uma arquitetura MVC é melhor definida usando um diagrama de sequência.

Os 2 não são iguais e não estão relacionados e é possível combinar as duas arquiteturas. Muitas empresas adotaram as etapas para criar a arquitetura N Nivel para não apenas a implantação e escalabilidade, mas também a reutilização de código.

Por exemplo, os objetos da sua Entidade comercial podem precisar ser consumidos por um aplicativo da área de trabalho, um serviço da Web exposto para um cliente, um aplicativo da Web ou um aplicativo móvel. O simples uso de uma abordagem MVC não ajudará a reutilizar nada.

Ed DeGagne
fonte
Se o mvc não estiver reutilizando nada para o seu cenário, existem benefícios do mvc em comparação com o arco de n camadas.
Dragon
2

Conclusão: N-camada é uma arquitetura, MVC um padrão de design. Eles são a mesma metáfora aplicada em dois campos diferentes.

ychaouche
fonte
1

Jerry: Aqui está um exemplo simples de como os dois estão relacionados:


Camada 1 - Consiste em modelos que se comunicam com a Camada 2 por meio de algum tipo de serviço de rede ou similar, controladores para lidar com a validação de entrada, cálculos e outras coisas relevantes para as visualizações. E contém as próprias visualizações, é claro - que podem ser a GUI em um aplicativo de desktop ou a interface da web em um aplicativo da web.


Camada 2 - Contém algum tipo de serviço ou outra maneira de receber mensagens da Camada 1. Não sabe / não deve saber sobre a Camada 1; portanto, só pode atender chamadas de cima - nunca peça coisas por si só. Também contém toda a lógica de negócios.


Camada 3 - Contém o modelo de domínio, a representação do objeto do banco de dados e toda a lógica para se comunicar e atualizar as entradas do banco de dados.

Arve Systad
fonte
1

Em um modelo de três camadas, toda a comunicação deve passar pela camada intermediária. Conceitualmente, a arquitetura de três camadas é linear. No entanto, a arquitetura MVC [model-view-controller] é triangular: a visualização envia atualizações para o controlador, o controlador atualiza o modelo e a visualização é atualizada diretamente a partir do modelo.

hassan ketabi
fonte
Na verdade, não é MVC, é MVVMC. Vejo que MVC ou MVVMC é apenas uma camada de apresentação, porque vejo que o controlador é apenas um middleware entre visualizações e BLL. É assim que eu o manteria para poder usar o BLL como uma biblioteca para criar uma interface do usuário para diferentes plataformas. É uma espécie de aspx.cs com suporte para asmx. Às vezes, sinto que o MVC é uma má maneira de organizar os arquivos em uma pasta do projeto, é um pouco difícil de entender porque todos os controladores estarão em um nível e exibem em subpastas. Também posso criar subpastas para controladores, mas seu trabalho duplicado.
Nithin B