1. EPiServer 7 ja MVC
”EPiServer tarjoaa kehittäjälle kaksi vaihtoehtoa sivupohjien
rakentamisessa – valitse Web Forms tai MVC projektin
vaatimuksien ja kehittäjän osaamisalueen mukaan.”
#EPi7Fin
Mikko Huilaja,
Ohjelmistoarkkitehti
01.11.2012
2. Agenda
• Mitä on MVC ja ASP.NET MVC
• Miksi MVC:llä on merkitystä
• Web Forms vs MVC
• MVC EPiServer 7 ympäristössä
• Miltä MVC projekti näyttää Visual Studiossa
3. MVC on suunnittelumalli
• Model - View - Controller
• Malli - Näkymä – Käsittelijä/Ohjain/Kontrolleri
• Malli erottelee vastuuut
‒ Datan
‒ Ulkoasun
‒ Logiikan
4.
5. ASP.NET MVC versiot
• ASP.NET MVC v1.0 julkaistiin 2009
• ASP.NET MVC v2.0 julkaistiin 2010
• ASP.NET MVC v3.0 julkaistiin 2011
• ASP.NET MVC v4.0 julkaistiin 2012
• EPiServer 6.0 käyttää MVC 1.0
• EPiServer 6 R2 käyttää MVC 2.0
• EPiServer 7 käyttää MVC 4.0
7. Mitä hyötyä MVC:stä on?
• Parantaa osien uudelleenkäytettävyyttä.
• Helpottaa kehittäjien roolijakoa.
• Selkeyttää projektin rakennetta.
• Ohjaa tilattomien sovellusten tekoon.
• Helpottaa projektien ulkoasun toteutusta.
8. MVC ohjaa kehittäjiä tekemään
tilattomia sovelluksia
• Ei mahdollista ViewState:n käyttöä
• Näkymät eivät voi kutsua enää kontrolleria
• Näkymään välitetään vain Model, joka
suunnitellaan ulkoasun tarpeisiin
• Kontrollereihin on helppo tehdä
erityyppisiä Action metodeja.
• ModelBinderit automatisoivat kutsujen
konvertoinnin takas Modeleiksi
9. ViewState tilakoneen poistuminen
muuttaa kehitystä monella tapaa
• Button Click pitää toteuttaa esim. POST kutsuna,
joka sisältää halutut parametrit.
• Pitää olla entistä tarkempi ettei käyttäjä pysty
sivua uudestaan lataamalla (F5) syöttämään
samaa riviä uudestaan.
• Ei ole olemassa DataTable:ja jotka helpottavat
sivutuksia ja sorttauksia.
• Kutsujen kesken ei voi välittää tietoa ellei käytä
sessioita tai keksejä.
10. Miksi tilattomia sovelluksia (RESTful)
• Selaimen URL-osoitte todella vastaa sisältöä.
• Selaimen back ja forvard napit toimivat kuten
käyttäjät ovat tottuneet.
• Hakukoneet löytävät sisällön ja linkit koska ne
eivät vaadi javascriptiä (ViewState:a).
• Testaus ja virheiden selvitys helpottuu, kun
sivujen tilaa virheen sattuessa ei tarvi huomioida.
11. EPiServer 7 ja MVC
• EPiServer CMS 7 on puhdas ASP.NET MVC
projekti, jota EPiServer on laajentanut.
• Tukee samanaikaisesti sekä Web Forms:ia ja
MVC:tä.
• Laajennukset:
‒ Route Handler
‒ EPiServer Template Resolver
‒ Filters
‒ HtmlHelperts
13. MVC execution life cycle (EPiServer)
EPiServer
EPiServer Template Resolver
14. MVC in EPiServer 7 CMS
• CMS registers a few default routes,
{lang}/{node}/{partial}/{action} is the most important
• {lang} is optional, allows you to specify the desired language.
• {node} is ’greedy’, will match as much of your page tree as
possible.
• {partial} only applies if the leaf content node’s type is registered
to have an EPiServer.Web.IPartialRouter.
• {action} is optional, but if specified corresponds to a method
name in the Controller.
• en/Products/Alloy Meet/Holographic/Projector-2000/Details
{lang}{ node }{ partial } {action}
• When the leaf Content node has been found, the ContentType’s
handler is determined: WebForms .aspx-page, or MVC-style
Controller
15. MVC helpers in EPiServer CMS 7
• In Web Forms, you would use the Property WebControl to
output a property
<EPiServer:Property PropertyName=”MainBody”
runat=”server” />
• In MVC Razor...
@Html.PropertyFor(m => m.MainBody)
17. Web Forms ei mahdollista
• Model, View, Controller vastuihin jakoa
• Tilattomien sovellusten tekoa
• Vahvasti tyypitettyjä näkymiä
• Sivutyyppien uudelleenkäyttöä
• Blockkien käyttöä
Sama on mahdollista tehdä myös WebFormilla!!!
19. MVC ja Web Forms hybridiprojekti
MVC ja Web Forms:ia voi käyttää rinnakkain, mutta on hyvä
ottaa huomioon:
• Eri ViewEngineillä tehtyjä sivuja voidaan käyttää
ristiin.
• Blockkien ristiinkäyttö vaatii omat
implementaatiot MVC:lle ja Web Forms:ille.
• MasterPages ja Razor Layout tiedostot täytyvät
elää rinnakkain.
• Pidemmän päälle koodi alkaa duplikoitumaan.
• Projektin rakenne on haastavaa pitää selkeänä.
21. Tiivistelmä
• EPiServer on menossa kohti MVC:tä.
• Web Forms on edelleen hyvin tuettuna
EPiServerissä.
• Olemassa olevien projektien konvertointi MVC:lle
ei välttämättä tapahdu hetkessä.
• Kehittäjien kannalta MVC tuo paljon muutoksia.
• MVC soveltuu pääsääntöisesti paremminkuin Web
Forms ulkoasultaan rikkaisiin verkkopalveluihin.
• EPiServer 7 ja MVC ovat loistava pohja projektille.
22. Kiitos!
Lisää tietoa löytyy twitter.com/huilaaja
Kysymyksiä voi lähettää #EPi7Fin tai @huilaaja
Editor's Notes
Kuinka moni käyttää työssään Visual Studioa?Kuinka moni on tehnyt töitä MVC:n kanssa?
Kontrolleri hakee ja alustaa modelin ja yhdistää Malli jakaa vastuut ja kuvaa niiden väliset yhteydetUlkoasua voidaan paremmin uudelleenkäyttääSamaa modelia voidaan käyttää useissa ulkoasuissa ja tarkoituksissa.
separation of concerns (SoC) Olen valitettavasti ollut näkemässä yli10 000 riviä pitkän Web Forms CodeBehind luokan (intialaisten tekemä). Sitä oli lähes mahdoton alkaa edes refaktoroimaan, koska homma oli karannu niin pahasti lapasesta ja Visual Studio joutu miettimään useita minuutteja tiedostoa avatessa.
MVC on suunniteltu nimenomaan GUI graaffisten käyttöliittymä ohjelmistojen kehitykseen.MVC 1979 by Trygve Reenskaug Norjalainen ProfessoriEPiServer 6 käytti MVC frameworkkia vain Gadgettien osalta.Käytännössä MVC:n käyttö oli sivustolla olisi vaatinut paljon työtä projektissa.
Valtaosa verkkosivuston ominaisuuksista kuuluu ASP.NET Coreen tai Framworkkiin. Esim. Routing ja Caching
1. Samaa modelia voidaan käyttää erilaisten ulkoasujen kanssa2. Pakottaa erottelemaan näkymät modelista3. Projektien rakenne antaa joustavuutta suunnitella se tarpeiden mukaan4. MVC-malli sisältää paljon laajennuspisteitä jotka mahdollistavat default toiminnallisuuksienkin muuttamisen5. Ei sisällä ViewStatea6. Rest rajapinnat helpottavat javascriptien ja ajax kutsujen tekoa ja näkymien erottelu helpottaa WD:n työtä.
ViewState on Microsoftin tekemä tilakone kuten Flash ja Silverlight.Se on hyvin monimutkainen tapa pitää yllä sivun tilaa kun internet ei ole suunniteltu tilalliseksi. Eli MVC on yksinkertaistus joka poistaa tilakoneen monimutkistamassa prosessia
PartialView näkymät auttavat
This is how the MVC request pipe line looks like.
This is actually the same image as before. I'll just tell you a few of the most important additions to the MVC request pipelineEPiServer has a RouteHandler that uses the EPiServer Page Tree and IPartialRoute functionality to match routes.EPiServer has added a TemplateResolver that adds content channel functionality and tagging
This is actually the same image as before. I'll just tell you a few of the most important additions to the MVC request pipelineEPiServer has a RouteHandler that uses the EPiServer Page Tree and IPartialRoute functionality to match routes.EPiServer has added a TemplateResolver that adds content channel functionality and tagging
Html.PropertyFor is analogous to the MVC standard Html.DisplayFor (which will locate a DisplayTemplate for the .NET type passed, and display it using that). The difference is that PropertyFor allows EPiServer to act appropriately to render the property in regular display mode or edit mode.@Html.BeginEditSection("h3", m => m.Heading) @Model.Heading@Html.EndEditSection("h3")Thisallowsyou do display something different (for example, somethingthat is derived from the property) and edit the actualproperty.
Razor View Engineä ei voi käyttää aspx sivujen ulkoasussa.
Vaikka interwebillä onkin hyvin selkeä näkemys Web Formin ja MVC:n eroista, niin valtaosa verkossa olevista perusteluista ei pidä paikkaansa.Ja valtaosa Web Formin heikkouksista perustuu siihen miten sitä implementoidaan.MVC ohjaa ja paikoin pakottaa miettimään asioita uudella tavalla.
Kun olemassaoleva sivusto konvertoidaan uudelle episerverille se ei tule kääntymään MVC muotoon.Mikäli halutaan MVC ominaisuudet käyttöön se vaatii paljon refaktorointia.Silloin hybridi malli voi olla sopiva ratkaisu.
EPiServer 6 sisälsi jo Gadgetit jotka oli tehty MVC:llä