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

Slides:



Advertisements
Liknande presentationer
Snabbguide och tips.
Advertisements

En presentation av ett unikt system
BAS-M Hur du på ett enkelt sätt administrerar din båtklubbs register.
Tomas Sandström, Adtollo
Skapa ett video-CV på YouTube
Intagningssystemets databas Ögonblicksbild Kopia av intagningsdatabasen Uppdateras 3 ggr per dag 07:15 – 12:15 – 15:15 Roller Skola, kommun Periodiseras.
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
This work is licensed under a Creative Commons 3.0 Attribution License Wikispaces för SBC En guide
API skillnader EPiServer 7 - CMS6R2 Uppgradering från CMS6R2
Meny •Hem: Visar denna sida. Kan användas för allmän info •ProNavigo visar Modellen, mallar, checklistor •Projektlänkar: visar en undermeny med lämpliga.
Mina Aktiviteter Integration med befintliga webbplatser.
Migrera befintliga system till Windows Azure
Anvisningstjänstens roll inom infrastrukturen för Svensk e-legitimation Martin Lindström
Azure Web sites IRL Robert Folkesson Active
Snabbare/enklare utveckling med Webfoundation (RAD) • Förslag som med framgång redan har smygits in i en del kund projekt, testats och givit snabbare utveckling.
ASP.NET MVC MVC historik ● Traditionellt arkitekturmönster som ansetts särskilt lämpligt i webbapplikationer ● Separation of concerns & loose.
”Ett sätt att distribuera Business Objects via webben”
Algoritmer och data strukturer -Länkade listor
Sweden SharePoint User Group WictorWilén
DCV Idéskiss Design Jag tror att jag ska ha en mörk och stilren design på mitt DCV. Det ska finnas dynamisk funktionalitet där designen byts utan att sidan.
OOP Objekt-orienterad programmering
receptbok coriq Allt du behöver för att lyckas
Ajax Dynamiska webbsystem. AJAX och web 2.0 Web 2.0 är egentligen bara ett ”buzzword” för en modern webbsajt. Innehållet skulle till exempel vara: Rich.
Metoder i java Det finns två typer av metoder i java
Arv.
Inkapsling.
Objektorienterad tänkande
Polymorfism.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
Zend Framework Exemplifierat med spagooy.com Kurs: Moderna applikationsmiljöer, HIK Handledare: Martin Blomberg Studenter: Robin Bengtsson, Magnus Spång.
Programmering i C# 3. Klasser.
PROCESSPROGRAMMERING
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
4. Arv och dynamisk bindning
ASP.NET MVC4 + NoSQL = Major Awesomness. IoC Container.
Vektorer (klassen Vector) Sortering
Anpassade inläggstyper för att hantera site- eller temaspecifikt innehåll Posttyper som finns i WordPress som standard är bl.a. inlägg, sidor och bilagor.
Internet Styrdatorer och kablar Uppkopplade användare Servrar 182.QRZN.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Programmering i C# 5. Structer.
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord ” Ingen vet vad han klarar innan han har försökt. ” - Publilius Syrus (85 f.Kr.-43 f.Kr.).
Programmeringsteknik för Media1 & K1
EKÄNGENS IF NÄRVAROREGISTRERING MEDLEMSHANTERING ADMINISTRATION.
PROCESSPROGRAMMERING Föreläsning ‏ Innehåll: Högnivå objekt för trådprogrammering: - Trådgrupper (”Thread pools”)‏ - Exekverare (Executor.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
A Beginner's Guide to SharePoint 2013 REST API [Rest/Odata/Json]
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Exempelbaserade specifikationer med SpecFlow
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
WIPCORE PRESENTATIONSMALL  TEXT: Förutom de element som redan är stylade (t.ex. versala rubriker) finns det ett par andra riktlinjer. –Ord du vill markera.
UTBILDNING FÖR SIBA I WEB FOUNDATION Erik Brandin, 16 februari 2010.
Microsoft Visual Studio och.NET Framework, idag och imorgon! Robert Folkesson
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Rikare webb med AJAX, Microsoft Silverlight, WPF och Expression Studio Robert Folkesson
KONSTEN ATT SKRIVA BRA ÅTERANVÄNDBAR KOD Pierre Setteskog, Pontus Munck
Sid 1 CD5250 Daniel Flemström MDH/IDT COM Extremely Rough Overview.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( )‏ Innehåll:  Introduktion till Java EE (Enterprise Edition)  Enterprise Java Beans.
Föreläsning 4 Klasser Och Objekt.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
1 Registrering och uppladdning shp-filer för geotekniska undersökningsområden - startläge.
Programmeringsteknik
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
✔ Webbprestanda? ✔ Tips! ✔ Serversidan ✔ Klientsidan ✔ Båda sidor ✔ Verktyg Fredrik Wendt jsolutions.se.
Lathund Ladoksupport.
Föreläsning 8: Exempel och problemlösning
Om publiceringssystem, lektion ett
Användarguide - chefer
Presentationens avskrift:

Webfoundation Pierre Setteskog / Terje Erwing Bjelkholm 2011-05-05

Webfoundation Agenda 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 Om Webfoundation 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å http://webfoundation.wipcore.se/ (login, registrera länk?) 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 Autofac 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. http://bradwilson.typepad.com/blog/2010/07/service-location-pt1-introduction.html

Webfoundation Autofac 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 var builder = new ContainerBuilder(); builder.RegisterType<Car>().As<ICar>().FactoryScoped();; builder.RegisterType<Engine>().As<IEngine>().FactoryScoped();; builder.RegisterType<Wheel>().As<IWheel>().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 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<MySuperV8Engine>().As<IEngine>().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 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 { /// <summary> /// Loads the specified builder. /// </summary> /// <param name="builder">The builder.</param> protected override void Load(ContainerBuilder builder) builder.Register<FilterViewDataFactory>().As<IFilterViewDataFactory>();

Webfoundation Autofac 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<Engine>().As< builder.RegisterType<Engine>().FactoryScoped();; Webfoundation har följande klass för att skapa upp x st objekt: AutofacHelper.Resolve<IFoundationSessionFactory>(); Och IContainerProvider var viewData = m_containerProvider.RequestContainer.Resolve<IMyPageViewData>(); Och IWebFoundationResolver resolver.ResolveMandatory<ISystemTextService>();    I web foundation registrerar man i: public class TestApplication : FoundationHttpApplication { protected override void RegisterServices(ContainerBuilder containerBuilder) Webfoundation controllers kan man överlagra med: containerBuilder.Register<MySelfRegisterController>().Named("controller.selfregister").FactoryScoped(); http://code.google.com/p/autofac/ 

Webfoundation MVC 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 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 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));

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<JobViewData>(); return viewData;

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<JobViewData>     {     }

Webfoundation CMS ny sida Ställ in den nya sidtypen i backoffice:

Store Front WebFoundation Arkitektur MVC View Controller Factory Service Repository eNova ViewData eNova Objects Model View Controler Databas

Webfoundation WebFoundation 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 WebFoundation 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 WebFoundation 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 Model/ViewData Produkt sida MenuItemNode Product MenuItems Children Product FullPage MasterPage TopMenu Menu MenuItemNode LeftMenu Menu Display Cms CmsProductListing Archive Images AccessorieProducts SimilarProducts PackageProducts VariantsProducts Breadcrumb ProductListItem … Cart SmallCartItem AttributeType AttributeTypes OwnerAttributeTypes AttributeGroup Customer AttributeValue

Webfoundation Model/ViewData Produktsida fortsättning ProductListItem DefaultVariant SelectedVariant ProductListItem ProductListItem BreadcrumbItem ClientListItem AttributeType AttributeGroup AttributeValue

Webfoundation Model/ViewData Produktlistnings sida Section FullPage … Display ProductList ProductListItem Products … Filter FilterListItem FilterFormItem Value

SelfRegisterCustomer Webfoundation Model/ViewData Registrerings sida Spara som SelfRegisterCustomer FullPage Customer DeliveryAddress InvoiceAddress Address User

Webfoundation Model/ViewData Kassa sida CheckoutPage FullPage OrderFlow ShippingAddress InvoiceAddress CartItemList ShippingAddresses Address ShippingType PaymentType CartItem

webfoundation orderflöde OrderStep AddressOrderStep View

ConfirmationOrderStep Webfoundation ORDERFLÖDE OrderStep AddressOrderStep OrderFinalizer ShippingOrderStep PaymentOrderStep ConfirmationOrderStep ...

webfoundation Settings Startup Settings Runtime 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 <settings> <simpleSettings> <setting key="ConcatenateCss" value="true" type="bool" /> </simpleSettings> <simpleSettings site="EN"> <setting key="ConcatenateCss" value="false" type="bool" /> </settings>

webfoundation settings Validering <validationSettings site="SE"> <model type="Wipcore.WebFoundation.Web.Sandbox.Models.SandboxContactUsViewData"> <property name="Subject"> <regex pattern="^[Aa].*” errorMessageIdentifier="SandboxContactUsViewData_Subject_BeginsWithA"/> <stringlength maximumlength="30” errorMessageIdentifier="SandboxContactUsViewData_Subject_StringLength"/> </property> </model> </validationSettings>

webfoundation Settings Orderflöde <orderFlow> <orderStep type="Wipcore.WebFoundation.Configuration.AddressOrderStep" ProgressIndex="2" defaultAssembly="Wipcore.WebFoundation" view="_address"/> <orderStep type="Wipcore.WebFoundation.Configuration.ShippingOrderStep" ProgressIndex="3" defaultAssembly="Wipcore.WebFoundation" view="_shipping"/> <orderStep type="Wipcore.WebFoundation.Configuration.PaymentOrderStep" ProgressIndex="4" defaultAssembly="Wipcore.WebFoundation" view="_payment"/> <orderFinalizer type="Wipcore.WebFoundation.Configuration.CosMonkiOrderFinalizer" defaultAssembly="Wipcore.WebFoundation" /> </orderFlow>

webfoundation Klient stöd 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 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 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"); /// <summary> /// V1.2 Adds hint text to input fields /// Depends: /// jquery-1.4.js /// </summary> 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 Debug tips 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   <appSettings file="WipcoreTest.config">

Webfoundation Debug tips 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 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 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 Enhetstest 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 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

Webfoundation Enhetstest

Webfoundation Enhetstest 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. 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. Vilken av följande funktioner har webfoundation inte stöd för: A. Skalning av produkt bilder. B. Komprimering av js filer. C. Integration

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