Presentation laddar. Vänta.

Presentation laddar. Vänta.

WEBFOUNDATION Pierre Setteskog / Terje Erwing Bjelkholm 2011-05-05.

Liknande presentationer


En presentation över ämnet: "WEBFOUNDATION Pierre Setteskog / Terje Erwing Bjelkholm 2011-05-05."— Presentationens avskrift:

1 WEBFOUNDATION Pierre Setteskog / Terje Erwing Bjelkholm

2  Om Webfoundation  Autofac  MVC  Routing TODO  CMS  WF  WF/eNOVA Base Objects TODO  HTML Helpers TODO  Settings (Runtime/Startup)  Archive  Model Binding TODO?  B2B  Order Flow  SubUsers/Access rights  Klient stöd  Debug/Enhetstest  Quiz WEBFOUNDATION AGENDA

3  Webfoundation är en gemensam webplattform för Wipcores kunder vilket medför följande fördelar: –Webfoundation är redan prestandatestad. –Webfoundation är redan testad med enhetstest. –Olika kunder kan ta del av ny funktionalitet. –Innehåller CMS –Bygger på MVC-standard. –Webfoundation har en grundarkitektur som kundprojekten bygger på vilket ger en enhetlig och bra arkitektur. –Bygger på Autofac DI vilket ger flexibilitet att byta ut vilken klass som helst i WebFoundation till en kundspecifik variant. –Innehåller en exempel-site (Sandbox) som i princip använder WebFoundation rakt av och bara definierar gränssnittet. Finns att testa på (login, registrera länk?)http://webfoundation.wipcore.se/ –Webfoundation innehåller vissa webrelaterade BackOffice-formulär som man idag får konfigurera in i efterhand. –Är idag inriktad på B2B men kommer att uppdateras till att stödja B2C med t.ex. färdiga betalväxlar. WEBFOUNDATION OM WEBFOUNDATION

4  Autofac förenklar en löst kopplad arkitektur och därmed enhetstester där man vill mocka klasser. (Mocka: att byta ut alla klasser som den klass du vill testa beror av mot hårdkodade test klasser som alltid returnerar samma värden oavsett databas mm.)  MVC uppmuntrar till att använda DI-ramverk, där Autofac har en färdig integration. WEBFOUNDATION AUTOFAC

5  DI-filosofin går ut på att man centralt beskriver vilka klasser som skall användas och när. Som ett recept på en bil: t.e.x. ge mig en Porche men byt ut hjulen mot dubbdäck och sätt in Bergarns motor istället. WEBFOUNDATION AUTOFAC

6 var builder = new ContainerBuilder(); builder.RegisterType ().As ().FactoryScoped();; builder.RegisterType ().As ().FactoryScoped(); var container = builder.Build() Public class Car: ICar { IEngine m_engine; IWheel m_wheel Public Car(IEngine engine,IWheel wheel) { m_engine=engine; m_wheel=wheel; } WEBFOUNDATION AUTOFAC

7  Autofac kan injekta i konstruktorn och i properties.  Fördelen med att med kod beskriva hur klasserna skall vara beroende jämfört med t.ex. XML-filer är att man får typsäkerhet och kan även definiera om en specifik metod (delegat) skall köras för att skapa din klass eller efter att din klass har skapats.  All registering bör ske innan man anropar build men senare Autofac klarar detta också.  Man kan skriva över en befintlig registrering om man vill, t.e.x. builder.RegisterType ().As ().FactoryScoped();  Containern bör man inte skicka runt i sin applikation för då skapar man ett beroende till Autofac.  Containern är som ett variabel-scope. Disposas containern dör alla objekt som har resolvats i den.  När man registrerar klasser skall man alltid sätta scopet på dem. FactoryScoped, HttpRequestScoped, SingletonScoped WEBFOUNDATION AUTOFAC

8  Man bör använda moduler för att klumpa ihop flera registreringar och för att få samma grundkonfiguration i sitt enhetstest. builder.RegisterModule(new DefaultModule()); public class DefaultModule : Module { /// /// Loads the specified builder. /// /// The builder. protected override void Load(ContainerBuilder builder) { builder.Register ().As (); WEBFOUNDATION AUTOFAC

9  Man behöver inte skapa interface för att jobba med Autofac. Man kan registrera abstrakta klasser och klasser också: T.e.x. builder.RegisterType ().As ().FactoryScoped();;  Webfoundation har följande klass för att skapa upp x st objekt: AutofacHelper.Resolve (); Och IContainerProvider var viewData = m_containerProvider.RequestContainer.Resolve (); Och IWebFoundationResolver resolver.ResolveMandatory ();  I web foundation registrerar man i: public class TestApplication : FoundationHttpApplication { protected override void RegisterServices(ContainerBuilder containerBuilder) {  Webfoundation controllers kan man överlagra med: containerBuilder.Register ().Named("controller.selfregister").FactoryScoped();  WEBFOUNDATION AUTOFAC

10  Fördelar med MVC:  Skiktad lösning.  Enhetstestbar  Lättviktiga sidor.  Enklare att styra utseendet.  SEO-optimerat  Ajax enablade formulär, länkar fungerar utan javascript  Jquery WEBFOUNDATION MVC

11  M=Model  V=View  C=Control  Webfoundation CMS har ett route entry med wildcard där page ID och produkt ID skickas med. Detta för att få bättre prestanda. WEBFOUNDATION MVC

12 WEBFOUNDATION CMS NY SIDA  För att skapa en ny sida i Enova CMS:  Skapa en ny enova klass som ärver av WebFoundationPage. T.e.x.: public class JobPage : WebFoundationPage  Skapa modellen för sidan ärv av t.ex. CmsInformationPage: [CmsPageTypeDefinition(typeof(JobPage))] public class CmsJobPageViewData : CmsInformationPageViewData { public override FoundationCmsViewData Populate(EnovaCmsPage page) { return base.Populate(page); }  }  Registerar sidan med Autofac: CmsViewDataFactory.Register(typeof(JobPage), typeof(CmsJobPageViewData));

13 WEBFOUNDATION CMS NY SIDA  Skapa Modellen för hela sidan. public class JobViewData : FullPageViewData { public JobViewData Populate(JobPage page) {return this; }  Skapa en Factory klass som skapar upp JobViewData (FoundationController anropar populate på CmsJobViewData) public class JobViewDataFactory { private readonly IContainerProvider m_containerProvider; public InformationPageViewDataFactory(IContainerProvider containerProvider) { m_containerProvider = containerProvider; } public virtual JobViewData Create() { var viewData = m_containerProvider.RequestContainer.Resolve (); return viewData; }

14 WEBFOUNDATION CMS NY SIDA  Skapa en ny controller: public class JobController : FoundationController { public SectionController(IWebFoundationResolver resolver); [ActionDefinition("Produktlistning", "Listar produkter som är länkade från denna sida.", "sv-SE")] [ViewDataDefinition(typeof(CmsJobViewData))] [ActionDefinition("Product list", "Lists products linked from this page.", "en-GB")] public virtual ActionResult List(); }  Skapa en ny sida med code behind: [ViewDefinition("Visar jobbsida", "Visar en jobbsida.", "sv-SE")] [ViewDefinition("Show job page", "Shows an job page.", "en-GB")] [AssociatedToCmsViewData(typeof(CmsJobPageViewData))] public class Job : ViewPage { }

15 WEBFOUNDATION CMS NY SIDA  Ställ in den nya sidtypen i backoffice:

16 STORE FRONT WEBFOUNDATION ARKITEKTUR MVC View FactoryServiceRepository eNova Controller Controler ViewData Model Databas eNova Objects

17  Man bör följa lagerlogiken för att hålla ordning i projektet, underlätta cachning och återanvändbarhet.  De grå rutorna visar i vilka skikt man bör använda ViewData, respektive eNova-objekt.  Repository lagret kan man kringå om önskas. WEBFOUNDATION

18  View, Enkel HTML för hela eller delar av sidan. Mindre inslag av C# kodsnuttar för vylogik.Skall ej innehålla affärslogik eller eNova-anrop. JavaScript och CSS lägges seperat. Enstaka JS-anrop kan förekomma för att initiera sidan.  Controller, Kontrollerar flödet i applikationen; vilken sida som skall visas. Är limmet mellan vy och modell. Tar emot anrop och anropar modellen för att skriva och läsa. Oftast lättviktig utan affärslogik.  Factory, Skapar vydata. Läser ut, transformerar, förenklar och plattar ut eNova-modellen för vyn. Oftast används en vymodell bara för en sida eller siddel så att man bara läser ut eNova- data för just den sidan. En bra factory-klass tar bort onödig komplexitet i vyn. Har en metod Create för att skapa vydata.  ViewData, POJO, en enkel databärare utan metoder som används i vyn. En vydata kan cachas, serializeras. Innehåller färdig beräknad data för aktuell vy som pris, lagerstatus, valuta mm. WEBFOUNDATION

19  Service, Innehåller affärslogik, bör ej vara beroende av webben. Oftast bara affärslogik som berör webben.  Repository, Innehåller typad sökning och uppslag av eNova-objekt. Viss hjälp för att navigera mellan eNova-objekt. Nackdelen att använda repository för att navigera mellan objekt är att man inte enkelt ser kopplingen på objektet som en metod eller property, vilket gör att det inte har använts fullt ut.  eNova-API:et är DAL och innehåller grundaffärslogik. Här lägger man enklast affärslogik som skall vara åtkomlig i hela systemet och som är prestandakänslig för remoting. Nackdelen är att Autofac inte kan användas här och att man måste ta ner hela systemet för att uppdatera en eNova-klass. eNova-klassen skall alltid innehålla hjälpmetoder för att enkelt kunna navigera runt i objekthierarkin. WEBFOUNDATION

20 MODEL/VIEWDATA PRODUKT SIDA ProductFullPageMasterPageTopMenu LeftMenu Cms Breadcrumb Cart Customer SmallCartItem Display CmsProductListing Archive ProductListItem Images AccessorieProducts SimilarProducts PackageProducts VariantsProducts AttributeType AttributeTypes OwnerAttributeTypes AttributeGroup AttributeValue Menu MenuItemNode MenuItems MenuItemNode Children …

21 WEBFOUNDATION MODEL/VIEWDATA PRODUKTSIDA FORTSÄTTNING ProductListItem DefaultVariant SelectedVariant AttributeType AttributeGroup AttributeValue BreadcrumbItem ClientListItem

22 WEBFOUNDATION MODEL/VIEWDATA PRODUKTLISTNINGS SIDA SectionFullPage Display ProductListItem Filter Products … FilterListItem FilterFormItemValue ProductList …

23 WEBFOUNDATION MODEL/VIEWDATA REGISTRERINGS SIDA SelfRegisterCustomer Address DeliveryAddress InvoiceAddress Customer User Spara som FullPage

24 WEBFOUNDATION MODEL/VIEWDATA KASSA SIDA CheckoutPageFullPage OrderFlow Address ShippingAddresses InvoiceAddress ShippingTypePaymentType ShippingAddress CartItem CartItemList

25 WEBFOUNDATION ORDERFLÖDE OrderStepAddressOrderStep View

26 WEBFOUNDATION ORDERFLÖDE OrderStepAddressOrderStep ShippingOrderStep PaymentOrderStep ConfirmationOrderStep... OrderFinalizer

27  Startup Settings –Läses in vid uppstart –Har högst prioritet  Runtime Settings –Slår igenom när filen uppdateras –Kräver inte omstart av webben WEBFOUNDATION SETTINGS

28  Validering WEBFOUNDATION SETTINGS

29  Orderflöde WEBFOUNDATION SETTINGS

30  Webfoundation har stöd för att konkatenera och komprimera Js och css filer med: Html.IncludeCss Html.IncludeJs Vilket man sen styr från runtime_settings.xml  Webfoundation har en bild arkivs funktion för produkt bilder. Där man laddar upp orginal bilden genom backoffice produkt sidasom sedan skallas om till olika storlekar. Storlekarna specifierar man genom en speciell dialog i backoffice. För att visa en produkt bild har man en html helper med bl.a. Följande metod: Html.ProductImageUrl(”product number",”size name") WEBFOUNDATION KLIENT STÖD

31  Webfoundation har bl.a.följande jquery plugin: AjaxLink gör att man kan använda ajax utan att skriva en rad javascript. Har stöd för browser historik,ladda status, seo, unobtrusive javascript.  AsYouTypeSearch vilket stödjer inte bara enova söken utan vilken ajax källa som hellst.  Hint fyller fält med en hint text.  MiniCart vilken stödjer att köp knappar uppdaterar minicarten med ajax.  VariantFilter variant väljare på produkt sidor. Jobbar mot en lokal json.  RememberForm spara värdena av ett formulär i cookie, bookmark url  Webfoundation har stöd för klient baserad produkt: filtrering, sortering, pagening, layout som typ prisjakt. Man kan kund anpassa utseende och funktionalitet och konfigurera det genom runtimesettings. Javascriptet jobbar mot en lokal json för snabba svar. Pluginen som används är bl.a. PageJson, FilterJson,Pager,SortJson WEBFOUNDATION KLIENT STÖD

32  Alla webfoundation Jquery plugin använder sig av Jquery ui widget factory och microsofts sätt att skriva objekt orienterad javascript.Exempel: Type.registerNamespace("Controls"); /// /// V1.2 Adds hint text to input fields /// Depends: /// jquery-1.4.js /// Controls.Hint = function () { } Controls.Hint.prototype = { _init: function () { this.element.parents("form").bind("submit", $.createEventDelegate(this, this.clear)); }, //call this manually if form is submited with ajax without calling submit event! clear: function () { if (this.element.val() == this.options.hintText) { this.element.val(""); } }, defaults: { hintText: null } Controls.Hint.registerClass('Controls.Hint', null, Sys.IDisposable); $.registerAsWidget(Controls.Hint); WEBFOUNDATION KLIENT STÖD

33  Ha en egen web.config där UseSynchronizer är avstängd då man inte har skapat nya cms sidor. Lägg till i web.config WEBFOUNDATION DEBUG TIPS

34  Ha en lokal business server genom att: –Kopiera foldern för BS servern – Kör Installutil /name="wipcore BS server xx" " C:\BS\WipcoreEnovaService.exe" – Exportera och importera register inställningar, ändra markerade register nycklar. WEBFOUNDATION DEBUG TIPS

35  För att debugga in i webfoundation.dll’erna.  Ställ in sökvägen till webfoundation källkoden genom att välja properties på solutionet. WEBFOUNDATION DEBUG TIPS

36  Deploy script är att rekommendera om man är flera utvecklare i samma projekt och har stor test miljö, för att undvika onödigt långa avbrott.  Update script är att rekommendera om man vill förenkla för framtida enova releaser eller tar emot många hotfixar. (Färdiga exempel script finns) WEBFOUNDATION DEBUG TIPS

37  MVC lämpar sig väldigt väl för enhetstest då allt är skicktat och mockbart.  Enhetstest är extra viktigt i en iterativ projekt metodik som scrum t.e.x.  Enova är besvärligt att mocka (kanske möjligt med us/projects/moles/).http://research.microsoft.com/en- us/projects/moles/  Enhets tests kan köras med nulldatabas eller i remote läge om man använder WebFoundationUnitTest klassen WEBFOUNDATION ENHETSTEST

38 WEBFOUNDATION ENHETSTEST

39 WEBFOUNDATION ENHETSTEST

40 WEBFOUNDATION ENHETSTEST 1.En service klass uppgift är att: A. Bygga modeller till controllern. B. Ta hand om alla webb relaterade funktioner som url’er cookies etc. C. Tillhandahålla all affärslogik. 2.Vitsen med Autofac är: A. Att inga klasser behöver veta något om varandra. B. Alla klasser får ta del av varandras innehåll. C. Alla klasser blir löst kopplade till varandra. 3.Vilken av följande funktioner har webfoundation inte stöd för: A. Skalning av produkt bilder. B. Komprimering av js filer. C. Integration

41 BackOffice BusinessServer Integration Search Web Customer Solution Dependencies My.Backofffice My.Web My.EnovaCore My.Integration Test Demo Webfoundation (sandbox) BackOffice BusinessServer Integration Search Web BackOffice BusinessServer Integration Search Web BackOffice BusinessServer Integration Search Web Enova + Webfoundation Enova + Webfoundation+Customer 2. DeployTest.cmd 1. UpdateProjectFromSandbox.cmd 3. DeployDemo.cmd EnovaRelease 0. UpdateEnovaRelease.cmd Project references


Ladda ner ppt "WEBFOUNDATION Pierre Setteskog / Terje Erwing Bjelkholm 2011-05-05."

Liknande presentationer


Google-annonser