MVC
Thursday, March 30, 2017
   

Latest Posts

Posted on 7/28/2016 by André Pires in Reflexões
Posted on 1/10/2014 by André Pires in .Net
Posted on 1/7/2014 by André Pires

Posts

Sobre MVC - Tem gente confundindo as coisas...

Posted on 1/6/2012 by André Pires
image

Hello galera! Como estão? Como foi a passagem de ano? Nesta primeira postagem do ano aproveito para desejar a todos um belíssimo 2012! Desejo que todos vocês obtenham sucesso em suas vidas e carreiras! Neste post vou falar de uma assunto que já está me incomodando e que em alguns lugares já está até meio polêmico: O MVC (Model View Controller)... Na minha humilde opinião, tem muita gente equivocada e alguns falando besteira... Será que eu sou um deles???

Hoje em dia tem gente falando sobre o Model-View-Controller (MVC). Já vi muitas definições/afirmações interessantes sobre o assunto, mas algumas em especial me chamam a atenção:

"MVC é um entre os diversos tipos de padrão de apresentação" ou "MVC é um padrão de apresentação" ou "MVC é apresentação e não tem regra de negócio", etc...

As afirmações acima podem ser encontradas em diversos sites/blogs de profissionais experientes e também em outros blogs de notáveis membros da geração Y ;)

Na minha carreira, trabalhei e utilizei MVC na década de 80 (é... MVC é velho!), quando trabalhei com SmallTalk na Coca-Cola. Até agora não sei de onde tiraram esse C do MVC, mas isso é outra história... Atualmente tenho ministrado treinamentos oficiais Microsoft que falam do ASP.Net MVC e minha equipe tem trabalhado com o padrão em alguns projetos.
Tudo que tenho a dizer sobre as definições do MVC que citei acima é: Estão erradas! Simples assim... MVC é um padrão de design, mas não dedicado somente à apresentação... Trata-se de um padrão de design 3-tiers que separa e deixa bem claro quais são as responsabilidades dessas 3 camadas em um software. Muito do que você conhece ou trabalha hoje, são variações desse antigo conceito...

O que tenho visto (e que me deixa preocupado) é que alguns estão confundindo o MVC com algumas implementações do padrão, como por exemplo o ASP.Net MVC.
O MVC não pode ser comparado, por exemplo, ao ASP.Net Web Forms! Uma coisa não tem nada a ver com a outra...

Vou deixar aqui minhas razões para afirmar que MVC não é um padrão de apresentação:

1) O objetivo principal do criador do padrão, em 1978, foi dar suporte ao modelo mental do usuário no que se refere ao contexto de informações relevantes e possibilitar que este mesmo usuário inspecione e modifique esta informação. 
Segundo o que o próprio criador do MVC me falou, o objetivo do MVC é permitir que o usuário crie dados de entrada no computador e que consiga também interpretar o que o computador dá como saída. Seu propósito é criar uma ponte entre o modelo mental do usuário e os bits e bytes do computador.
Ora, mas o que significa isso? O que significa permitir a criação de dados de entrada num computador, conseguir interpretar e modificar estes dados e respostas e tomar decisões de controle dessas informações? Até onde sei, isso está intimamente relacionado com o que chamamos de regras de negócio... Então afirmações do tipo "MVC é apresentação e por isso não pode ter regra de negócio", são complemente equivocadas...

2) O Sr. Trygve me disse também que outro objetivo do MVC é permitir que o usuário esteja no controle e chama o usuário de "Programa Principal" e que a essência do MVC é a separação de responsabilidades... Ele cita claramente em sua resposta que o M é o Domínio do sistema e que o V e o C dão suporte direto ao que parece ser o mapa mental do usuário. Se o M é o domínio do sistema, não tem como ficar quebrando o domínio em coisas do tipo Dominio do Negócio e Domínio de Apresentação... Domínio é a abstração disso tudo...
Em seguida ele cita que ele o uso que ele fez da palavra "Apresentação", pode ser interpretada de forma restritiva e levar alguns a pensar que o MVC é somente uma solução para apresentação, mas diz que as ilustrações que fez nos documentos mostra que o significado de apresentação é "Apresentação para entrada direta de dados pelo usuário" e não que o MVC deva ser entendido como uma solução para apresentação...

Levando em conta as afirmações acima, fica claro que o MVC não é uma solução para apresentação, mas sim um padrão de design que cobre todas responsabilidades de um sistema de computador (inclusive apresentação), como eu já dizia mesmo antes de obter a resposta do Sr. Trygve.

Para os céticos e trolls eu deixo abaixo a cópia dos emails trocados entre mim e Trygve:

----------------------------------------------------------------------------------------------
Hello André Pires,
MVC is indeed targeted at both the user creating computer input and the user interpreting computer output. Its purpose is to bridge the user's mental model and the bits in the computer.

One goal of  MVC is to let the user be in control. ("The main program is in the user"). The essence the MVC is its separation of concern. First, the representation of the abstract Model (Domain) information in the computer. Second, its View and Controller that supports the user's direct manipulation of what appears to be a map of his mental model.

Looking trough old MVC documents, I see that my use of the word 'presentation' can be taken restrictively, but illustrations should show that the meaning is 'presentation for the user's direct manipulation'. Also, the Smalltalk-80 implementation used a dedicated object for View input. Unfortunately, they called this object a 'controller'.


There is room for many system architectures under the MVC umbrella. You will therefore find many different definitions of MVC.  The following is a draft pattern language that covers some of the variants.
http://folk.uio.no/trygver/2003/javazone-jaoo/MVC_pattern.pdf

Class libraries that purports to cover MVC may be useful, but they can never cover more than a particular implementation of MVC since the M, the V, and the C represent object responsibilities rather than classes.

I hope you find this useful.
--Trygve

---------------------------------------------------------------------------------------------_
On 2012.01.06 14:58, André Pires wrote:

Hello Mr. Trygve!

I'm Andre Pires, Microsoft Trainer down here in Brazil and big fan of you.
I'm writing to ask you about the MVC.
There is a discussion nowadays about what MVC really is, so I thought that no one is better than you to respond to this question...
Some people (some of them are very experienced professionals), are saying that MVC is a Presentation Pattern, which means that MVC is a solution related only to presentation subjects. They even compare it to ASP.Net Web Forms, by calling both Presentation Frameworks...
I totally disagree with this idea and I would like to hear from you the correct definition of MVC...

Is it a presentation solution or a Design Pattern for the whole application development?
I'm reading your PDF's now, trying to find the best definition, but any word from you would be very welcome!

Thanks for helping!

Best regards,

André Pires - Mindworks – Múltiplas Conexões com seu Negócio





Home   |   Forum
André Pires 2011