De siste par ukene har jeg og et par kolleger jobbet på et kundeprosjekt hvor målet var å lage en web-applikasjon for å samle inn informasjon fra potensielt nye kunder, og sende ut informasjon til interessenter. Bruksscenariet i seg selv var ikke det mest revolusjonerende, men tid var viktig i prosjektet, og vi ønsket å bruke biblioteker og rammeverk som gjorde at vi raskt fikk noe opp og kjøre. Gjennom denne bloggposten håper vi å inspirere andre til også å prøve ut disse nykommerne på .NET-scenen.
Applikasjonen ble basert på ASP.NET MVC 3-rammeverket, et rammeverk som ble lansert i januar. Som navnet tilsier, er rammeverket bygget på Model-View-Controller-mønsteret, hvor domenelogikken (modellen) og brukergrensesnittet (view’et) holdes adskilt. Ved å definere fire klasser i modellen og benytte oss av den innebygde Razor view engine, hadde vi raskt generert en fungerende webapplikasjon med fire ulike skjemaer som nettstedets besøkende kan fylle ut. Informasjonen som brukerne fyller ut skal selvfølgelig tas vare på i en database, i tillegg trigger utfyllingen av noen av skjemaene e-postutsending (både kvittering til brukeren, oversending av informasjon til kundebehandler og lignende). Til disse to oppgavene tok vi i bruk to hendige små verktøy som gjorde hverdagen litt enklere: Dapper.NET og MvcMailer.
Dapper.NET
Dapper.NET er en lettvekts ORM (object-relational mapping), utviklet av gjengen bak StackOverflow, med fokus på god ytelse. StackOverflow er en side med mange besøkende, og dermed også store mengeder databasetrafikk. Opprinnelig benyttet de LINQ to SQL, men på grunn av den enorme mengden kall (hundrevis pr sekund) ble CPU-kostnaden ved å konstruere en dynamisk metode per kall for stor, og CPU-bruken gikk raskt i taket. For å bøte på dette ble Dapper.NET utviklet, og denne løser utfordringen med høy CPU-bruk ved å cache informasjon for hvert kall. Ved å benytte denne informasjonen genereres objekter fra spørringens resultat på halvparten av tiden, sammenlignet med LINQ to SQL.
Dapper.NET består kun av én enkelt fil, ved navn SqlMapper.cs, som du bare kopierer inn i prosjektet for å komme i gang. Denne filen utvider IDbConnection-grensesnittet med Query- og Execute-metoder som tar seg av mappingen mellom domeneobjekter og tabellrader i databasetabellen. For å få ut en en IEnumerable med sterkt typete objekter fra din produktdatabase, er det tilstrekkelig å skrive denne kodesnutten:
Dapper.NET vil så ta seg av mappingen fra tabellradene til objektets egenskaper (properties) med samme navn, og objektene du får ut er fullgode domeneobjekter, som om du skulle ha laget dem selv vha ‘parsing’ og ‘casting’. En spørring med parametere er heller ikke spesielt avansert:
Når du skal skrive til databasen, er det nesten like enkelt:
For mer informasjon og litt mer kompliserte eksempler, ta en titt på disse lenkene:
- Dapper.NET-prosjektets hjemmeside på Google Code, lenke
- CodeProject.com: A look at Dapper.NET, lenke
- InfoQ: StackOverflow’s ORM goes open source – Dapper.NET, lenke
- Kom i gang med Dapper.NET (bloggserie): del 1, del 2, del 3 , del 4.
MvcMailer
Som nevnt i innledningen, skulle app’en generere en rekke e-poster når en besøkende har fylt ut et skjema. Tidligere erfaringer med å generere e-poster via kode har vært litt blandet, man ender som regel opp med å slå sammen en rekke strenger og det hele føles litt skjørt og uelegant. Heldigvis kom vi over en lekker, liten sak ved navn MvcMailer, tilgjengelig via NuGet, som fikser biffen. For å installere MvcMailer, skriver du følgende linje i Packet Manager-konsollen i Visual Studio:
PM> Install-Package MvcMailer
Ved hjelp av Scaffolding-systemet i MVC, kan du raskt generere opp e-postmaler for forskjellige scenario, med både HTML- og tekstvarianter. Skriv for eksempel følgende linje i Packet Manager-konsollen for å komme i gang:
Scaffold Mailer UserMailer UserRegistered,ChangePassword -WithText
Det genereres da opp nye views for hver ønskede e-postmal, som du bruker på nøyaktig samme måte som et hvilket som helst annet view i MVC 3-app’en din for å vise brukerdata. For å generere en e-postkvittering til en ny registrert bruker på nettsiden din, kan du for eksempel lage denne metoden:
I view’et “UserRegistered” skriver du HTML-koden for å styre utseendet på e-posten din, og bruker Razor-syntaks for å flette inn dynamiske brukeropplysninger:
For en mer detaljert gjennomgang av de ulike mulighetene i MvcMailer, anbefaler jeg en titt på prosjektets wiki på GitHub: MvcMailer step-by-step.
Andre gode ressurser for MvcMailer er følgende lenker:
- Scott Hanselman: NuGet Package of the Week #2 – MvcMailer, lenke
- CodeProject.com: Announcing MvcMailer – Send E-mails Using ASP.NET MVC View, lenke
- MvcMailer-prosjektets sider på GitHub.com, lenke




