MVC, MVP, și coloana vertebrală.js
există foarte puține, dacă există cadre JavaScript arhitecturale care pretind că implementează modelele MVC sau MVP în forma lor clasică, deoarece mulți dezvoltatori JavaScript nu văd MVC și MVP ca fiind reciproc exclusive (de fapt, este mai probabil să vedem MVP implementat strict atunci când analizăm cadre web, cum ar fi ASP.NET sau GWT). Acest lucru se datorează faptului că este posibil să aveți o logică suplimentară de prezentator/vizualizare în aplicația noastră și să o considerați în continuare o aromă de MVC.
Backbone contributor al Bocoup Irene Ros din Boston subscrie la acest mod de gândire, ca atunci când separă punctele de vedere în propriile componente distincte, are nevoie de ceva care să le asambleze pentru ea. Aceasta ar putea fi fie o rută a controlerului (cum ar fi un Backbone.Router
, acoperit mai târziu în carte), fie un apel invers ca răspuns la preluarea datelor.
acestea fiind spuse, unii dezvoltatori simt că coloana vertebrală.js se potrivește mai bine descrierea MVP decât o face MVC. Punctul lor de vedere este că:
-
prezentatorul din MVP descrie mai bine
Backbone.View
(stratul dintre șabloanele de vizualizare și datele legate de acesta) decât un controler. -
modelul se potrivește
Backbone.Model
(nu este foarte diferit de modelele din MVC deloc). -
vizualizările reprezintă cel mai bine șabloane (de exemplu, șabloane de marcare a ghidonului / mustaței).
un răspuns la acest lucru ar putea fi faptul că vizualizarea poate fi doar o vizualizare (conform MVC), deoarece coloana vertebrală este suficient de flexibilă pentru a permite utilizarea acesteia în scopuri multiple. V în MVC și P în MVP pot fi ambele realizate deBackbone.View
deoarece sunt capabili să atingă două scopuri: atât redarea componentelor atomice, cât și asamblarea acelor componente redate de alte vizualizări.
am văzut, de asemenea, că în coloana vertebrală responsabilitatea unui controler este partajată atât cuBackbone.View
, cât și cuBackbone.Router
și în exemplul următor, putem vedea de fapt că aspecte ale acestui lucru sunt cu siguranță adevărate.
coloana vertebralăPhotoView
folosește modelul Observatorului pentru a „abona” la modificările modelului unei vizualizări din liniathis.model.bind("change",...)
. De asemenea, gestionează templarea în render()
metodă, dar spre deosebire de alte implementări, interacțiunea cu utilizatorul este gestionată și în Vizualizare (Vezi 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
();
}
});
o altă opinie (destul de diferită) este că coloana vertebrală seamănă mai mult cu Smalltalk-80 MVC, prin care am trecut mai devreme.
ca Blogger coloana vertebrală regulat Derick Bailey a pus anterior, este în cele din urmă cel mai bine să nu forțeze coloana vertebrală pentru a se potrivi orice modele specifice de design. Modelele de proiectare ar trebui considerate ghiduri flexibile pentru modul în care aplicațiile pot fi structurate și, în acest sens, coloana vertebrală nu se potrivește nici MVC, nici MVP. În schimb, împrumută unele dintre cele mai bune concepte din mai multe modele arhitecturale și creează un cadru flexibil care funcționează bine.cu toate acestea, merită să înțelegem de unde și de ce au apărut aceste concepte, așa că sper că explicațiile mele despre MVC și MVP au fost de ajutor. Numiți-o Calea coloanei vertebrale, MV*, sau orice altceva ajută la referirea aromei sale de arhitectură a aplicațiilor. Majoritatea cadrelor structurale JavaScript vor adopta propriile modele clasice, fie intenționat, fie accidental, dar important este că ne ajută să dezvoltăm aplicații care sunt organizate, curate și pot fi ușor întreținute.