MVC, MVP, and Backbone.js
Existem muito poucos, se algum de arquitetura frameworks JavaScript que pretendem implementar o MVC ou MVP padrões em sua forma clássica, como muitos JavaScript, os desenvolvedores não ver MVC e MVP como sendo mutuamente exclusivos (nós, na verdade, são mais propensos a ver o MVP rigorosamente aplicado ao olhar para frameworks web como ASP.NET ou GWT). Isto porque é possível ter uma lógica de apresentação/visualização adicional em nossa aplicação e ainda considerá-lo um sabor de MVC.
contribuidora da coluna vertebral de Bocoup Irene Ros, baseada em Boston, subscreve esta forma de pensar, como quando ela separa visões em seus próprios componentes distintos, ela precisa de algo para realmente montá-las para ela. Isto pode ser uma rota de controle (como umBackbone.Router
, coberto mais tarde no livro), ou uma resposta em resposta aos dados sendo obtidos.
dito isto, alguns desenvolvedores sentem essa espinha dorsal.js melhor se encaixa na descrição de MVP do que MVC. Sua visão é que:
-
o apresentador em MVP descreve melhor o
Backbone.View
(a camada entre modelos de vista e os dados ligados a ele) do que um controlador faz. -
o modelo encaixa
Backbone.Model
(não é muito diferente dos modelos em MVC em tudo). -
as vistas representam melhor os modelos (por exemplo, Modelos de guiamento/bigode).
uma resposta a isso pode ser que a vista também pode ser apenas uma vista (como por MVC), porque a coluna vertebral é flexível o suficiente para permitir que ela seja usada para múltiplos propósitos. A V do MVC e o P no MVP pode tanto ser feito por Backbone.View
porque eles são capazes de atingir a dois propósitos: composição atômica componentes e montagem desses componentes prestados por outros pontos de vista.
Nós vimos também que, na Espinha dorsal, da responsabilidade de um controlador é compartilhado com os dois Backbone.View
e Backbone.Router
e no exemplo a seguir, podemos ver que os elementos de que são certamente verdadeira.
nossa espinha dorsal PhotoView
usa o padrão do observador para “subscrever” as alterações ao modelo de uma vista na linhathis.model.bind("change",...)
. Ele também lida com a criação de modelos de render()
método, mas ao contrário de algumas outras implementações, a interação do usuário também é tratada na Vista (ver events
).
var
PhotoView
=
Backbone
.
View
.
extend
({
//... is a list tag.
tagName
:
"li"
,
// Pass the contents of the photo template through a templating
// function, cache it for a single photo
template
:
_
.
template
(
$
(
"#photo-template"
).
html
()
),
// The DOM events specific to an item.
events
:
{
"click img"
:
"toggleViewed"
},
// The PhotoView listens for changes to
// its model, re-rendering. Since tHere's
// a one-to-one correspondence between a
// **Photo** and a **PhotoView** in this
// app, we set a direct reference on the model for convenience.
initialize
:
function
()
{
this
.
model
.
on
(
"change"
,
this
.
render
,
this
);
this
.
model
.
on
(
"destroy"
,
this
.
remove
,
this
);
},
// Re-render the photo entry
render
:
function
()
{
$
(
this
.
el
).
html
(
this
.
template
(
this
.
model
.
toJSON
()
));
return
this
;
},
// Toggle the `"viewed"` state of the model.
toggleViewed
:
function
()
{
this
.
model
.
viewed
();
}
});
outra opinião (bastante diferente) é que a espinha dorsal se assemelha mais ao Smalltalk-80 MVC, que passamos anteriormente.como o blogueiro regular Derick Bailey já disse anteriormente, é melhor não forçar a coluna vertebral a se encaixar em qualquer padrão específico de design. Os padrões de Design devem ser considerados guias flexíveis para a forma como as aplicações podem ser estruturadas e, a este respeito, a coluna vertebral não se adapta nem à MVC nem à MVP. Em vez disso, empresta alguns dos melhores conceitos de múltiplos padrões arquitetônicos e cria um quadro flexível que apenas funciona bem.
no entanto, vale a pena entender onde e por que esses conceitos se originaram, então espero que minhas explicações de MVC e MVP tenham sido de Ajuda. Chame-lhe o caminho da espinha dorsal, MV*, ou o que quer que ajude a referenciar o seu sabor de arquitetura de Aplicação. A maioria dos frameworks JavaScript estruturais irão adotar seus próprios padrões clássicos, intencionalmente ou por acidente, mas o importante é que eles nos ajudam a desenvolver aplicações que são organizadas, limpas e podem ser facilmente mantidas.