MVC é um padrão de projeto ou padrão arquitetônico

109

De acordo com Sun e Msdn , é um padrão de design.

De acordo com a Wikipedia , é um padrão arquitetônico

Em comparação com os padrões de design, os padrões arquitetônicos são maiores em escala. (Wikipedia - padrão arquitetônico )

Ou é um padrão arquitetônico que também possui um padrão de design?

Qual deles é o verdadeiro ?

JCasso
fonte
1
Pois deve haver uma resposta verdadeira ...
Mike G
de acordo com Dave da Product Madness, MVC é um padrão de design, assim como RobotLegs. : P
andygoestohollywood

Respostas:

56

MVC é mais um padrão arquitetônico, mas não para uma aplicação completa. MVC se relaciona principalmente à camada de interface / interação de um aplicativo. Você ainda precisará da camada de lógica de negócios, talvez alguma camada de serviço e camada de acesso a dados. Ou seja, se você estiver na abordagem de n camadas.


fonte
16
Sim, eu diria que MVC é um padrão de arquitetura para sua camada de apresentação.
murki
8
Discordo totalmente sobre "MVC principalmente se relaciona à camada de interface / interação de um aplicativo". O modelo "M" / no MVC é a camada de negócios, que você provavelmente deseja dividir em várias camadas.
mewm
Sim, esta resposta está errada. MVC absolutamente não é sobre UI / Interação. Você pode perfeitamente ter mvc no lado do front-end e no lado do back-end, no início a visualização era geralmente apenas um html / js ou .jsp ou .phtml e o servidor define o controlador e o modelo. Exemplo de JSP (visualização), JavaBeans (modelo), Servlet (controlador). Mesmo conceito com todos os famosos frameworks de php (symphony, zend, cake etc.). Mas agora, os frameworks de front-end se parecem com aplicativos de back-end e os frameworks javascript modernos usam mvc (html sua visão, controla seu script e modela seus objetos js como entidade)
amdev
40

Por que um deles tem que ser verdadeiro?

Ambos podem ser verdadeiros, dependendo do ponto de vista.

MVC pode ser um padrão arquitetônico, se formar a base da arquitetura do aplicativo.

Ele também pode ser visto simplesmente como um padrão de design, uma noção abstrata aplicável a qualquer aplicativo.

Oded
fonte
27

Os padrões de design dizem como escrever código de forma eficaz (considerando as métricas de código ).

Alguns benefícios:

  1. Fácil manutenção
  2. Alta reutilização
  3. Legível por causa de abstrações

Os padrões arquitetônicos dizem como utilizar os recursos de maneira eficaz.

  1. A execução de tarefas paralelas como programadores e designers gráficos pode funcionar paralelamente.
  2. Várias tecnologias podem ser utilizadas para construir um software.

Em MVC, a). Visualizações podem ser criadas usando modelos javascript e também html pode ser usado b). Os controladores podem ser escritos no framework .NET ec). Os modelos podem ser escritos em Java - um serviço java pode ser usado que retorna apenas dados json.

Enquanto estiver no padrão de design, um padrão não pode ser implementado no qual o código pode ser escrito em várias tecnologias como classe AdminUser em Java, classe Cliente em C #, classe Parceiros em Php e um padrão de fábrica em Ruby :); hmmm..tão fácil? :)

vrluckyin
fonte
6

Eu sei que já foi respondido há algum tempo, mas ninguém ainda mencionou o livro que tornou MVC famoso: Pattern-Oriented Software Architecture (POSA), de Buschmann, et al publicado em 1996. Embora não seja tão lido como o livro de Padrões de Design , por Gamma, et al, POSA é um dos livros fundamentais usados ​​pela comunidade de padrões.

Ah, e o POSA identifica claramente o MVC como um padrão arquitetônico. Meu palpite é que a MS e a Sun estão apenas sendo negligentes e chamando cada padrão de "padrão de design".

John
fonte
3

Eu acho que ambos são verdadeiros. Se você está olhando para uma instanciação específica de MVC em uma estrutura como Ruby on Rails, essa instanciação é mais um padrão de design. Se você olhar para MVC como um conceito geral , é mais um padrão arquitetônico.

Jim Ferrans
fonte
3

Os padrões de design dentro da tríade de classes Model / View / Controller (MVC) incluem e não podem ser limitados a:

  • Observador , desacoplando objetos para que as alterações em um (o modelo) possam afetar qualquer número de outros (as vistas) sem exigir que o objeto alterado (o modelo) conheça os detalhes dos outros (as vistas).

  • Composite , que nos permite tratar um objeto de grupo (uma visualização composta) da mesma forma que tratamos um de seus objetos individuais (componentes de visualização).

  • Estratégia , onde uma visão usa uma instância de uma subclasse de Controlador para implementar uma estratégia de resposta particular; para implementar uma estratégia diferente, basta substituir a instância por um tipo diferente de controlador.

  • Método de fábrica , especificando a classe do controlador padrão para uma visualização.

  • Decorador , adicionando rolagem a uma visualização.


Referência

  • Páginas 4 a 6 (Seção 1.2 Padrões de projeto em Smalltalk MVC)
  • Páginas 293 a 304 (padrão de design do observador)
  • Páginas 163 a 174 (padrão de design composto)
  • Páginas 315 a 324 (padrão de design de estratégia)
  • Páginas 107 a 116 (padrão de design do método de fábrica)
  • Páginas 175 a 185 (padrão de design do decorador)

Eric Gamma, Richard Helm, Ralph Johnson e John Vlissides. Padrões de projeto: Elementos de software orientado a objetos reutilizáveis . Addison-Wesley, Reading, MA, 1994.

George
fonte
1
Obrigado, todas as outras respostas estão erradas. Não é absolutamente "dependendo de um ponto de vista" e ter dezenas ou centenas de votos não tornará algo errado verdadeiro. MVC não é um padrão de design em si, é uma maneira de arquitetar seu código em 3 camadas usando vários padrões de design que você mencionou. Todo o framework que implementa MVC nos bastidores usa o conceito de Observable, Strategy e Composite Pattern. A melhor maneira de entender MVC é criar sua própria implementação e então você entenderá os padrões de design por trás.
amdev
2

MVC sempre é mencionado e introduzido como / na camada de apresentação nos livros de arquitetura de software.

Leia estes livros:

  1. Architecting Microsoft.NET Solutions for the Enterprise (Microsoft press)

  2. Padrões de design profissional ASP.NET (Wrox)

  3. Padrões de soluções corporativas usando Microsoft.NET (Microsoft press)

  4. Padrões de arquitetura de aplicativos empresariais (Addison Wesley)

  5. Um guia prático para arquitetura corporativa (Prentice Hall)

Saleh Rahimzadeh
fonte
6
por que 2 respostas? você poderia adicionar esta resposta como uma nota adicional à sua primeira
frogatto
2

Se você colocar dez arquitetos de software em uma sala e fazê-los discutir o que é o padrão Model-View-Controller, você terminará com doze opiniões diferentes. … Alguns dos puristas por aí inevitavelmente terão escrúpulos com o que chamo de “MVC”. Sinta-se à vontade para deixar um comentário inflamado no quadro de mensagens na parte inferior desta página da Web. Terei prazer em entreter diferentes perspectivas sobre o que MVC significa, mas tenha em mente que não me importo.

Josh Smith

Saleh Rahimzadeh
fonte
1

E de acordo com Martin Fowler, são arquiteturas GUI: Martin Fowler-GUI arquitetures

Depende do tamanho do aplicativo, já que afeta apenas as classes relacionadas à GUI, em um pequeno (principalmente GUI) pode ser considerado um padrão de arquitetura, enquanto em um enorme seria apenas um padrão de design que você aplica à GUI código (pode ser 10% do código do aplicativo).

Iker Jimenez
fonte