Kategorier

Skalerbar arkitektur for MusicNodes.no

Rammeverk, patterns og metodikk

  • 13. september 2010

    Postet av Kolbjørn Bredrup
  • Kommentar ikon  2

Jeg fikk et spørsmål her en dag om hvilke patterns vi bruker i arkitekturen til www.musicnodes.no, og jeg fant ut at jeg skulle prøve å oppsummere for meg selv også hva vi faktisk bruker av teknologi, verktøy, rammeverk og patterns. Så her kommer en lang og relativt nerdete liste med ting og tang hulter til bulter.


Produkter og teknologi

Musicnodes kjører på .net 4.0 og vi skriver kode i c#. Programmeringen gjøres i Visual Studio 2010 naturligvis med god hjelp Resharper. Resharper har jeg brukt så lenge og er så nødvendig at jeg strengt tatt ikke lenger har oversikt over hvilken funksjonalitet som kommer derfra og hvilken funksjonalitet som faktisk finnes i Visual Studio. I tillegg bruker vi en liten plugin som heter GhostDoc som gjør det litt kjappere å dokumentere metoder og klasser.

For lagring av data benytter vi Microsoft Sql Server 2008. Rapportering til plateselskaper og redaksjoner gjøres ved bruk av Reporting Services og import av data er satt opp ved hjelp av Integrations Services. Begge deler er produkter som følger med Microsoft Sql Server.

Kildekodekontroll gjør vi med Subversion, og bruker både TortoiseSVN og Visual SVN. For å holde oversikt over hvilken test coverage vi har bruker vi DotCover, og ytelsen kartlegges med dotTrace.

Hosting gjøres in the cloud, hvor vi kjører Internet Information Services 7.5 hos Amazon AWS.

Rammeverk og patterns

Systemarkitekturen er satt opp som en vanlig trelagsarkitektur med et presentasjonslag, et forretningslag og et integrasjonslag/datalag.

Hoved-pattern er domain model som får hjelp av diverse servicer i forretningslaget. Servicene konfigureres ved bruk av dependency injection, og vi har satt opp en enkel service locator, som også fungerer som en inversion of control container. Loggingen gjør ved bruk av log4net, og noen av oss synes Baretail funker bra for å lese loggene. Automatiske tester implementeres med nUnit.

For å koble oss på databasen og gjøre O/R-mappingen bruker vi nHibernate som konfigureres med fluent nHibernate.

Presentasjonslaget er basert på klassiske asp.net forms, og inneholder så lite kode som mulig, slik at mest mulig av koden kan testes automatisk. Vi jobber også med MVC 2, og kommer kanskje en gang til å flytte over på MVC. Det visuelle lages med XHTML og CSS og vi har noen javascript som benytter jQuery.

I tillegg har vi en player som er laget i Flash (se et eksempel med Howl) som er integrert med resten av tjenesten via Fluorine. Og musikken streames fra 7digital.

Prinsipper og metodikk

Det ligger jo litt i navnet Nimble  [ˈnɪmbəl]   at utviklingsprosessen blir kjørt med bruk av smidige (agile) metoder. Vi har daglige stand up møter, kjører 4 ukers sprinter, oppdatearer burndown charts og har ukentlige status og prioriteringsmøter med kunden.

Ved all programmering vi gjør har vi fokus på utvidbarhet, skalerbarhet og lesbarhet. Derfor følger vi tørre-sokker-prinsippene (DRY SoC’s, eller altså Don’t Repeat Yourself og Separation of Concerns).

Ellers har vi bakgrunn fra Lean Software Development, og har fokus på å levere mest mulig verdi tidligst mulig, og bedrive så lite waste som mulig. Blant annet derfor forsøker vi i så stor grad som mulige å følge YAGNI-prinsippet (You Ain’t Gonna Need It).

Det er i det hele tatt mange ting man må forholde seg til som utvikler gitt. Det er sikkert flere ting som burde vært nevnt her, men det er nå dette jeg kommer på her og nå.

2 kommentarer
  • Pharmg908
    26. oktober 2012

    Hello! dkbdaaa interesting dkbdaaa site! I’m really like it! Very, very dkbdaaa good!

Beklager, kommentarfeltet er stengt.