4/16/2007

O MVC, o MTV e o Django


Como muitos sabem, MVC ( Model – View – Controller ) é um padrão de desenvolvimento, que é um padrão que separa o desenvolvimento nessas 3 camadas.

Model – nessa camada é implementada o banco de dados ou o modelo objeto-relacional.

Controller – nessa camada é implementado as regras de negocio, onde são processados os dados vindo camada Model e passados para a camada View.

View – nessa camada é onde fica a interface do sistema.

O MVC é muito utilizado nos dias de hoje e tem agradado a muitos desenvolvedores para web por separar a parte de programação de dados da parte da programação visual de um sistema feito para web, onde geralmente essas partes de um sistema são feitos por pessoas diferentes.

Em conseqüência ao aceitamento desse padrão pela comunidade, surgiram muitos frameworks que implementam esse padrão como o Ruby on Rails, Struts, Mentawai, TurboGears, Django entre muitos outros.

Como citado acima o desenvolvimento usando o django é feito de acordo com o MVC separado nessas 3 camadas. Até ai tudo perfeito, mas há um problema.

Qual problema?

O django usa as nomenclaturas para as camadas,diferente do modelo MVC. Para modelo o django usa model, para view ele usa template, até ai tudo bem. Mas ele define o controller como view. Isso mesmo, o django define o controller como view. E tem também as generic ‘views’ que são controllers genéricos para situações comuns como master/detail, delete, update.

O problema é maior ainda porque muitos desenvolvedores acham que essa nomenclatura errada chique porque as iniciais delas são igual aquele canal de TV a MTV ( Model – Template – View ).

Eu mesmo não gostei nada disso, porque isso pode confundir muitos que estão iniciando nesse framework.

Eu só não entendo porque eles resolveram chamar o controller de view.

Pensei, pensei e ainda não descobri.

Bom, eu prefiro o MVC e você?

3 comentários:

semente disse...

Bom, eu prefiro o MTV, mas de acordo com a explicação do FAQ! :-P

Django appears to be a MVC framework, but you call the Controller the “view”, and the View the “template”. How come you don’t use the standard names?

Well, the standard names are debatable.

In our interpretation of MVC, the “view” describes the data that gets presented to the user. It’s not necessarily how the data looks, but which data is presented. The view describes which data you see, not how you see it. It’s a subtle distinction.

So, in our case, a “view” is the Python callback function for a particular URL, because that callback function describes which data is presented.

Furthermore, it’s sensible to separate content from presentation — which is where templates come in. In Django, a “view” describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.

Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.

If you’re hungry for acronyms, you might say that Django is a “MTV” framework — that is, “model”, “template”, and “view.” That breakdown makes much more sense.

At the end of the day, of course, it comes down to getting stuff done. And, regardless of how things are named, Django gets stuff done in a way that’s most logical to us.

Érico Martins disse...

Olá,
Minha formação acadêmica é em Matemática no entanto atuo na área da informática aplicada.
Meu contato com Python se deu recentemente devido a um interesse em estudar mais a fundo linguagens de programação (conheço somente Pascal). Tentei iniciar por Smalltalk, no entanto não encontrei material para isso, o mesmo não acontece com o Python.
Enfim, o seu blog me ajudou a entender algumas questões. Obrigado e parabéns.

Narcélio Filho disse...

Quando o termo MVC foi criado, a camada "Controller" servia apenas para tratar os eventos gerados pelo usuário, e não para gerenciar todas as "regras de negócio" do sistema. Isso foi no tempo pré-web, quando os programadores tinham que ter uma preocupação extra com os eventos gerados pelo usuário. Hoje em dia essa camada vai do código HTML (ou javascript) de uma página na web até o módulo no servidor HTTP que decide qual arquivo do sistema será carregado com a requisição do usuário. Como o semente mostrou, no caso do Django o controller é o próprio framework.

Hoje em dia, MVC é só mais uma buzzword. Qualquer bom programador sabe que deve, no mínimo, separar as camadas de dados e de apresentação! Então, você pode dar nomes malucos pra suas N camadas e criar siglas à revelia que ninguém vai achar ruim não! `:^)