ASP.NET MVC + Castle Windsor + NHibernate

Jeg har i den sidste tid arbejdet på at etablere webprojekt, der benytter sig af en håndfuld interessante teknologier, og vil i den forbindelse lige dele en håndfuld ressourcer, der har været nyttige for mig.

Grundlæggende går det ud på at lave en webarkitektur, som giver en høj grad af afkobling mellem komponenter, så man opnår øget testbarhed og mulighed for at konfigurere og komponere sit system på en lettere måde.

ASP.NET MVC

MVC frameworket er ude i beta og så ready-for-prime-time at man godt kan bygge rigtige ting med det (se f.eks. stackoverflow.com), og det giver fuld markup-kontrol og andre fordele for folk, der er lidt trætte af traditionelle webforms.

Castle Windsor

Windsor er en Dependency Injection container fra Castle Project.

DI er en teknik, der gør det let at vælge composition fremfor inheritance, når man designer objektorienteret. Nedarvning er godt til meget, men bliver nemt noget uoverskueligt rod, hvis man vælger at nedarve blot for at udvide funktionalitet — her er komposition tit et bedre valg. Og med en DI container bliver det meget lettere at designe og vedligeholde hvilke komponenter man udvider sin funktionalitet med.

NHibernate

NHibernate er en Object/Relational Mapper (ORM), og en .Net port fra javamoderen Hibernate. NHibernate er som Castle Windsor open source og en meget udbredt ORM.

NHibernates nærmeste Microsoft-konkurrent er nok MS Entity Framework (EF), men EF vurderes af mange til ikke at være modent nok til at kaste sig over før den næste version og andre igen mener at man helt skal holde sig væk. NHibernate kan ikke sammenlignes med Linq2Sql, som har et helt andet og reduceret featureset.

Outtro

Det link, som jeg har fået mest ud af har jeg gemt til sidst. Jeffrey Palermo, der er ved at skrive en bog om Mvc-frameworket, er tovholder på open source eksempelprojektet CodeCampServer.

Projektet benytter sig af Windsor, Mvc og NHibernate, det indeholder masser af unittests og er et rigtigt godt eksempel på at strukturere et webprojekt.

Happy hacking.

11 kommentarer til “ASP.NET MVC + Castle Windsor + NHibernate”

  1. Morten siger:

    Underholdende læsning. Kan dog ikke finde ud af om indlægget er sort humor eller alvorligt ment. Sort er det under alle omstændigheder.

    Kunne godt tænke mig at være flue på væggen i dit hjem for en aften (taler I sådan til hinanden?)…..

    God fornøjelse

  2. dalager siger:

    Det er skam alvorligt ment!
    Og nej, sådan taler vi ikke til hinanden… Det er vist kun mig… ;)

  3. Nederskovblog » Blog Archive » Jeg er ikke som de andre … siger:

    [...] drøm af en iPOD nano, eller en ulykkelig kærlighed til den sidste Sony Ericson, eller ASP.NET MVC + Castle Windsor + NHibernate eller [...]

  4. Kristjan Wager siger:

    Dalager, jeg har ved flere lejligheder hørt NHibernate og LINQ blive nævnt som alternativer. Har du et indtryk om det kun er i nogle situationer hvor de kan substituere hinanden, eller om det er mere bredt?

  5. dalager siger:

    NHibernate kan ikke umiddelbart sammenlignes med linq2sql, da NH’s feature set er langt mere omfattende.

    Hvis du skal sammenligne NH med noget fra Microsoft selv, skal det være Entity Frameworket, som dog ikke er helt parat til prime time endnu, tror jeg. Ellers er det kommercielle ORM produkter som f.eks. LBLGEN pro som også har fået en Linq provider.

    Hvis det handler om at få et simpelt datalag op at køre, kan linq2sql nemt bruges, men hvis du gerne vil lave avancerede mappings (flere forskellige varianter af nedarvning, spredning af én klasse over flere tabeller, komponent-mappings), eller forskellige caching strategier (distribueret cache med MemCached, eller Asp.Net cache med sql dependent expirations eller forskellige andre. Velocity er vist også på trapperne).

    Det er sværere at komme igang med NHibernate, end Linq. Man skal forstå mapping-formatet, hvor komplekse many-2-many relationer og deres cascading godt kan drille lidt (m-2-m understøttes i øvrigt slet ikke af linq2sql).
    NH har heller ikke fået rigtig linq support endnu, selvom den vist er på trapperne.

    Jeg har sikkert glemt noget, men du kan få en kode-demo over en kop kaffe en dag ;)

  6. Kristjan Wager siger:

    Det vil jeg bestemt tage imod. Har ikke hørt noget godt om NHibernate før, men det tror jeg er fordi folk ha brugt den i situationer hvor mindre kunne gøre det.

  7. Brian siger:

    Jeg kiggede på et tidspunkt på både Castle Windsor og Spring.NET. På baggrund af min ret korte undersøgelse fandt jeg førstnævnte langt lettere at gå til, så thumbs up her fra :)

  8. dalager siger:

    jeps, det er også min erfaring. Det er faktisk en fornøjelse at arbejde med. Så kan man jo altid prøve ninject, structuremap, unity, autofac eller hvad faen der ellers er af muligheder.

    Jeg tror at jeg vil prøve at kigge på at bruge Windsors fluent interface (i trunk), så man kan få compile time checks. Selvom jeg i øjeblikket løser problemet udmærket ved at instantiere containeren via unittests.

  9. Torben siger:

    Som gammel Javanørd og present .Net analfabet undrer det mig umiddelbart at .Net ikke lader til at have noget mindst lige så godt at tilbyde udviklerne mht. OR mapping. Det lader ikke til at NHibernate er voldsomt udbredt og hvis Entity Frameworket fra MS ikke er modent endnu, hvad gør I dygtige .Net udviklere så? Eller er jeg bare en Javanørd der overvurderer mapping problemet, når nu man med lidt Linq-lækkerier kan det hele på den halve tid?

  10. dalager siger:

    I .Net har man traditionelt ikke løst problemet med værktøjer fra Microsoft, da de indtil LINQ ikke har eksisteret. Anbefalingerne fra Microsoft har i årevis været at man skal skrive et lag af stored procedures i databasen som man så tilgår med ADO.NET. Hjemmestrikkede datalagsabstraktioner og mappinglag fra helvedet er en del af den hverdag. Og det kan være fint nok, men der går rigtigt mange timer ind i den del af projekter.

    Alternativt har man kunne benytte sig af tredjepartsprodukter til ORM – om det så er kodegenereringsværktøjer fra den ene eller den anden leverandør.

    Med Linq-lækkerier kan man en masse på den halve tid, men det er vigtigt at forstå at man altså ikke kan det hele ;)

  11. Lancering: Arena365 | Monitoring Dalager siger:

    [...] har i et tidligere blogindlæg beskrevet stacken, og siden da er der kommet nogle yderligere ting [...]

Skriv en kommentar

Hvad er 2 plus 2? (antispam spørgsmål...)