Sådan blev arkitekturen i Umbraco 5.0 skrevet om fra bunden

IT-Udfordringen: Det krævede en komplet omskrivning af Umbraco-koden, før version 5.0 af det danske open source-CMS kunne sendes på gaden.

Nogen gange må man rive gammelt ned for at kunne bygge nyt op.

Det var tilfældet med den nye version 5.0 af de danske open source-CMS Umbraco, der blandt andet bruges til at håndtere og udgive indhold hjemmesiderne hos store virksomheder som BBC, Fox og Peugeot.

Den nye version krævede så store ændringer i koden, at en total omskrivning af hele content management-systemet fra bunden af lå lige for.

For ikke alene er den gamle måde at håndtere brugergrænseflader på gravet op af fundamentet og erstattet med en ny metode kaldet ASP.NET MVC. Det var i sig selv en stor ændring.

Læs også: Ny version af dansk CMS: Umbraco 5.0 klar til download

Umbraco 5.0 har samtidig fået en ny tilbygning med navnet Hive, som er et nyt abstraktionslag til dataadgang mellem det populære CMS og forskellige cloud-platforme som for eksempel Microsofts Windows Azure.

Lead architect hos Umbraco, Alex Norcliffe, fortæller her om opgaven med at få Umbraco 5.0 klar.

Hvad var målet med projektet?

»Målet var både at erstatte webforms med ASP.NET MVC, men også at forberede Umbraco til at kunne håndtere den måde, som Microsoft Windows Azure håndterer data på,« siger Alex Norcliffe til Version2.

MVC er et design pattern fra den objektorienterede verden, som kort fortalt beskriver koblingen mellem brugergrænsefladen og den logik, brugeren skal have fat i bag grænsefladen. .NET MVC er en mere elegant erstatning af webforms, men det var ikke trivielt at skifte til den nye teknologi:

»Derfor endte version 5.0 med at blive en komplet omskrivning af Umbraco, fordi vi vurderede, at det ville kræve det samme stykke arbejde at udskifte the guts i systemet, som det ville kræve at skrive det hele om fra bunden af,« forklarer Alex Norcliffe til Version2.

»Der er overordnet set to tilgange til de populære cloud-infrastrukturer. Den ene er Amazon, som tilbyder traditionel hosting on demand. Som det er nu, kan du fint afvikle Umbraco 4.0-applikationer hos Amazon, men der er stadig en masse ting fra den almindelige hosting-verden, som du skal tage stilling til.«

»Med Microsofts Windows Azure er grundtanken, at man adskiller viden om cloud-tjenesten fra applikationen. Dermed skal Umbraco-applikationen ikke tænke på ting som fil-typer eller -stier.«

»Vi ville gerne forberede Umbraco på den separation, og det har vi gjort med Hive, som er det nye abstraktionslag til håndtering af data mellem Umbraco-applikationer og forskellige cloud-tjenester.«

»Det betyder, at rå filer som for eksempel .jpg'er ikke længere bliver behandlet som en fil, men i stedet håndteres gennem en provider

»Det er vigtigt, fordi det altid vil være fristende at bruge gammeldags stier til filer, hvis du for eksempel skriver en Umbraco-applikation, der skal gemme til en fil. Men hvis du gør det, så kan du få problemer, hvis du senere bruger en platform som Windows Azure, der ikke benytter stier til filer.«

»Det spændende ved Hive er, at den ikke kun behandler filer, men dataindhold i det hele taget. Lige nu har vi fokuseret på SQL Azure, men i fremtiden vil man uden videre bare kunne skrive en provider til at gemme de data i for eksempel MongoDB eller en af de andre NoSQL-databaser.«

»Det er muligt med det nye abstraktionslag, fordi Umbraco-applikationen snakker med Hive, som igen snakker med for eksempel Windows Azure.«

Hvad har din rolle været på projektet?

»Umbraco er et meget anti-enterprise firma, så vi går ikke så meget op i titler,« siger Alex Norcliffe til Version2.

»Men jeg har fungeret som lead architect, hvilket betyder, at jeg har skullet holde overblikket og diskutere kodeudviklingen og ændringsforslag til koden på tværs af teamet.«

»Det kan være en svær rolle at balancere, fordi man på et open source-projekt altid balancerer mellem at modtage en masse kode fra forskellige steder i community'et, men samtidig skal sørge for, at kvaliteten er høj nok til, at kunderne fortsat kan stole på Umbraco.«

Hvilke teknologier og værktøjer har I brugt?

»Til udviklingen bruger vi Microsoft Visual Studio og en række plugins, blandt andet Resharper til kodeanalyse.«

»Et andet glimrende værktøj er NCrunch, som er super godt til continuous test driven development. Det har jeg selv brugt siden de tidlige alpha-versioner af Umbraco 5.0. Det er rigtigt godt til at give hurtigt feedback på, om den kode, du har skrevet, er dækket ind af dine unit tests.«
Unit tests er kort fortalt en metode til løbende at teste, at individuelle funktioner og metoder i kildekoden opfører sig korrekt, i takt med at koden ændres.

»Vi har som noget nyt brugt unit tests under udviklingen af Umbraco 5.0. Lige nu har vi dækket en ret stor del af koden ind med unit tests. Og så har vi også et sæt af unit tests til de udviklere, der skriver plugins til Umbraco.«

»Derudover bruger vi Teamcity til vores build-server, som afvikler vores tests for os, og Youtrack til at få feedback om bugs i koden.«

Hvilke problemer har I oplevet undervejs i projektet?

»Fra et projektsynspunkt var det fra begyndelsen meget svært at koordinere arbejdet, fordi vi har folk siddende over hele verden. Det var for eksempel ret kompliceret at koordinere arbejdet med at overgå fra webforms til ASP.NET MVC,« fortæller Alex Norcliffe til Version2.

»Men vi fandt hurtigt et mønster med at bruge forskellige former for samarbejdsværktøjer og for eksempel arrangere kode-sessioner over Skype.«

»Fra et kodesynspunkt var det ret smertefuldt at skulle skifte over til ASP.NET MVC. Kunden er ligeglad med, om Umbraco-versionen hedder 4.0 eller 5.0, men vi skiftede over til MVC for at hjælpe dem, der sidder og laver hjemmesider baseret på Umbraco.«

»Derudover ville vi gerne skabe et system, som gør det muligt at have et community, der skriver plugins til Umbraco.«

»Det gav problemer, fordi vi gerne vil have et system, som gør det muligt at installere et plugin og senere fjerne det igen, uden at der bliver efterladt alt muligt konfigurations-kode i Umbraco.«

»Derfor lavede vi en plugin-installer, som adskiller sig fra den måde, den typiske ASP.NET-hjemmeside fungerer på, hvor alt anbringes i en og samme mappe. Vi ville gerne adskille plugins og lægge dem i en dedikeret mappe, og vi havde nogle problemer med at sikre, at ASP.NET stadig kunne finde filerne bagefter.«

Hvilke gode råd kan du give videre?

»Vi faldt tidligt i et hul, hvor vi sad og stirrede os blinde på detaljerne i projektet. Så det vigtigste er at gøre tingene i små bidder. Begynd med at få et overblik over systemet, lav en grov skitse og arbejd med tingene på et højt niveau.«

»Derudover vil jeg anbefale test driven development. På den måde har du en række tests klar, der kan bekræfte, om du har gjort det rigtigt, hvis du på et senere tidspunkt ændrer i koden.«

»Samtidig er det vigtigt at være pragmatisk. Det er alt for let at sige, at hvis et produkt ikke er 100 procent perfekt, så er det nul procent perfekt. Den form for stivhed ender altid op i et dårligere produkt.«

»Og så kan jeg klart anbefale remote programming, hvis udviklerne sidder forskellige steder i verden. Det seneste års tid har jeg vel brugt omkring halvdelen af mit arbejdsliv på Skype med pair programming. Min erfaring er, at du får nogle meget produktive sessions ud af det, sammenlignet med hvis begge programmører sad på det samme kontor, fordi man er mere fokuseret på at få noget fra hånden.«

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Følg forløbet
Kommentarer (0)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere