O MVC se aplica apenas à web

14

É quase instantâneo sempre que falo com os desenvolvedores sobre o Model View Controller ( MVC ), eles dizem que você solicita uma URL, o servidor cria uma entidade (MODEL) e fornece uma representação visual desse modelo.

  • Então, isso significa que o MVC é apenas para a Web ou eu tenho conhecido pessoas que são apenas desenvolvedores que empregam o MVC para criar aplicativos da Web?

  • Existem usos para o MVC em aplicativos de estilo de área de trabalho?

  • Eu, pelo menos sou novo em paradigma e gostaria de saber de qualquer superconjunto para MVC

Deeptechtons
fonte
1
você verificou o wikis da tag Programmers.SE ou Stack Overflow para 'mvc'?
Gnat
3
@gnat sim eu fiz
Deeptechtons
6
bem, então você provavelmente já sabe a resposta para sua pergunta, não é?
gnat 21/03
4
@gnat sério NÃO, eu sou totalmente novo no MVC (como afirmado) e nunca usei ou ouvi falar (alguns ouvidos) sobre o MVC ser aplicado a aplicativos Windows ou usado um aplicativo que ostenta um crachá MVC na página de downloads. Desculpe se a pergunta era tola, mas para mim ele faz quebra-cabeça
Deeptechtons
Existem muitos recursos bons para aprender a história do MVC, mas eu vejo muito esse conceito errado, então escrevi um bom resumo no meu blog blog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Respostas:

22

MVC é um padrão. Os padrões se aplicam a toda a programação. O MVC funciona muito bem em um contexto da web.

Como o gnat aponta, basta dar uma olhada na tag mvc e você verá vários exemplos dela sendo implementados.

Tom Squires
fonte
5
Isso é fundamental. O MVC funciona muito bem em aplicativos da Web e, de fato, é uma grande parte do motivo pelo qual as estruturas modernas baseadas em MVC (como Rails, Django e ASP.NET MVC) são tão populares. Também funciona em outros contextos (como aplicativos de desktop), mas é mais difícil manter uma separação limpa de exibição e controlador, portanto, variantes que removem a separação do controlador de exibição como Model-delegator (usado pelo Swing) ou mudam onde ocorre a divisão como Model-View-ViewModel (usado principalmente por aplicativos .Net WPF) são mais comuns em aplicativos de desktop.
21812 Kevin Cathcart
Se você observar a descrição original do Smalltalk sobre o que um controlador faz - traduza a entrada do usuário em mensagens para o modelo - o próprio Windows é basicamente um grande controlador; é por isso que o MVC como padrão não combina muito bem com os aplicativos de interface do Windows. É usado muito mais em UI Frameworks para sistemas não Windows.
KutuluMike
@MichaelEdenfield Na verdade não; você pode fazer o MVC e o WinForms juntos, embora o MVP seja mais popular lá, mas o MVP é uma variante do MVC de qualquer maneira.
Andy
45

Considerando que o MVC é de 1977 e a web foi inventada apenas em 1991, deve ser bastante óbvio que o MVC não é apenas para a web.

Jörg W Mittag
fonte
30
Este é um bom começo de resposta, mas tem um gosto amargo na boca.
Nicolas C.
2
Correto e sarcástico. Coisas boas!
Tom Hawtin - tackline
1
"Em 1982, o Internet Protocol Suite (TCP / IP) foi padronizado e o conceito de uma rede mundial de redes TCP / IP totalmente interconectadas chamadas Internet foi introduzido." wiki . Se você quer dizer netscape, tudo bem ... mas a "web" existia antes disso.
JMQ
4
@jmquigley "a Internet" e "a Web" são duas coisas muito diferentes.
22812 Eric King
1
O @jmq 1977 ainda é AINDA antes de 1982, e como alguém apontou Web! = Internet. A web realmente não existia antes de 1991.
Andy
9

Não, o desenvolvimento para OS X e iOS usa o padrão Model View Controller.

Holli
fonte
2
Finalmente, uma resposta ao primeiro e segundo pontos sem o comentário.
21412 JeffO
8

Faça a pergunta em um ambiente Microsoft e muitas pessoas assumirão que você quer dizer Asp.Net MVC, que é uma implementação MVC especificamente para a web.

Infelizmente, há muitas pessoas que não percebem que essa é uma implementação do padrão MVC e pensam que são termos intercambiáveis, o que leva a uma suposição de "apenas web".

ozz
fonte
3
+1 este é o problema de nomear uma plataforma após uma metodologia. Quando as pessoas são apresentadas à plataforma, elas deixam de ver a distinção.
precisa saber é o seguinte
@Ozz este fez explicar por que outros desenvolvedores usar sempre a dizer sobre web quando MVC é o tema
Deeptechtons
1
Pare de pintar os desenvolvedores da Microsoft como estúpidos, obrigado.
Andy
@ Andy - que não era o desenvolvedor do MS, eu também sou desenvolvedor do Asp.Net MVC, e mantenho a resposta original. Eu não disse "todas" as pessoas, ou "todos" os desenvolvedores .net, apenas uma observação de uma suposição ou erro que eu já vi muitas pessoas cometem. Obrigado.
ozz
2

Pelo menos até onde eu sei, a primeira implementação do MVC foi no Smalltalk. Definitivamente estava presente no Smalltalk-80. Embora eu não tenha nenhuma documentação útil para provar isso, acredito que (ou algo parecido) esteja no Smalltalk há alguns anos.

A maioria das estruturas da GUI OO inclui pelo menos alguma variante do MVC. Não tenho certeza, no entanto, exatamente o que "superconjunto" significaria nesse caso. É um pouco difícil dizer se alguma variante é um superconjunto, subconjunto ou par do MVC, mas eu tenderia a considerar a maioria deles pares.

De qualquer forma, muitos deles (a maioria?) Foram usados ​​para desenvolvimento de desktops, não para web. Graças a algumas patentes antigas da AT&T, a maioria dos sistemas de janelas exige que os programas possam gerar novamente visualizações sob demanda. Isso (quase) força pelo menos algum grau de separação entre o código que mantém o estado atual (o modelo) e o código que exibe esse estado (a visualização). Isso ainda deixa muito espaço para variação em 1) o grau em que a funcionalidade do controlador é isolada e 2) os detalhes exatos de onde desenhar as linhas entre cada uma das peças principais.

Jerry Coffin
fonte
1

Não, aplica-se mesmo a aplicativos independentes. Exemplo O Java Swing segue o MVC.

Seshagiri TV
fonte
1
Por que o voto negativo da pessoa deixada viver!
Deeptechtons 22/03/12
1

Portanto, existem muitos padrões de design diferentes nessa área.

  • Apresentador da vista de modelo (mvp)
  • Apresentador de exibição de vista de modelo (mvvp)
  • Model View Controller
  • Model 2

e assim por diante. Ao longo dos anos, eles foram entrelaçados, misturados, alterados e aplicados em uma ampla variedade de contextos. O ponto importante aqui é que o padrão de design do MVC de 1977 mudou bastante e não é mais o padrão de design usado pelos frameworks da Web do lado do servidor. Como um exemplo na implementação original do smalltalk, o Model observaria a exibição de alterações, o que não é mais o caso, pois o servidor simplesmente não pode observar os elementos html no navegador do usuário. Em vez disso, se a visualização mudar, ela enviará uma solicitação ao controlador que atualizará a visualização. Novamente, a implementação original do MVC não é seguida, pois uma atualização no modelo implica que todas as visualizações dependentes do modelo sejam atualizadas.

As estruturas modernas da Web seguem uma arquitetura simples de três camadas, também conhecida como arquitetura Modelo 2.

É claro que existem exemplos de arquiteturas MVC reais na Web, mas geralmente são apenas do lado do cliente, conectados a um servidor que segue a arquitetura do Modelo 2, pois as visualizações são xml e json e não são observadas para alterações. Exemplos de arquiteturas mvc puras do lado do cliente são Sencha Touch e Sproutcore.

Se você possui MVC no navegador, mvc como no servidor e mvc como camada de dados, você tem uma implementação hierárquica de mvc.

Nota. Eu só falei sobre estruturas da Web, outras implementações do MVC, como java swing e Flex, têm outras diferenças de implementação.

Kjaer
fonte
Certamente não faz sentido o motivo pelo qual as pessoas rejeitam os outros, se algo estiver errado, diga-lhes e dê a chance de corrigir sua opinião. Se eles não têm conhecimento sobre o assunto, um bom professor os direcionará para a fonte correta, não o derrote até que ele aprenda direito !!
Deeptechtons 22/03/12
a questão assume que MVC e web trabalho bem togather e implora para mvc não web, então quando você só dar exemplos de MVC em um contexto web: -1
Hildred
1

Uma coisa que você deve saber é que existem tantos tipos de MVC quanto estruturas que pretendem implementar o MVC.

A maioria concorda com o fato de que o Modelo possui algum estado e o View o processa. Mas o controlador tem papéis muito diferentes.

No Smalltalk, onde foi descrito pela primeira vez, o Modelo é o núcleo de seus aplicativos, dados e métodos de negócios. O View é uma representação gráfica do estado do aplicativo (também conhecido como Modelo), e o Controller gerencia os eventos de entrada do usuário, mouse e teclado. O Controller, por exemplo, roteia os eventos do teclado para o elemento view que tem o foco.

Nas páginas .jsp, o Model é principalmente dados, a View renderiza esse Model para HTML e o Controller faz o roteamento do Model para a View apropriada para renderizá-lo.

Portanto, para responder sua pergunta, embora o MVC seja usado em aplicativos independentes (Java, .Net, Flex) e na web (páginas jsp), é uma coisa muito diferente. Isso significa que o MVC que você conhece não é usado em aplicativos independentes.

Florian F
fonte