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.
- Asp.Net MVC
- Scott Guthrie’s blogindlæg tagget med mvc
- Rob Conery’s MVC Storefront screen cast serie
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.
- NHibernate.org
- NHibernate Forge – community site med interessante NHibernate-relaterede projekter
- Summer of NHibernate — screencast serie og gode links. Version 1.2, dog.
- Oren Eini er meget aktiv comitter og blogger på ayende.com
- NHUsers @ google groups — aktiv mailingliste som jeg skimmer i digest format
- Kig også på Jeffrey Palermos teknik til at koble NHibernate ISession lifecycle med Http-requests
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.
5. November 2008 kl. 20:44
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
6. November 2008 kl. 15:30
Det er skam alvorligt ment!
Og nej, sådan taler vi ikke til hinanden… Det er vist kun mig… ;)
12. November 2008 kl. 17:29
[...] drøm af en iPOD nano, eller en ulykkelig kærlighed til den sidste Sony Ericson, eller ASP.NET MVC + Castle Windsor + NHibernate eller [...]
23. November 2008 kl. 00:13
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?
23. November 2008 kl. 11:24
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 ;)
29. November 2008 kl. 11:25
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.
1. December 2008 kl. 16:32
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 :)
1. December 2008 kl. 20:59
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.
17. December 2008 kl. 22:31
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?
17. December 2008 kl. 22:38
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 ;)
26. August 2009 kl. 11:19
[...] har i et tidligere blogindlæg beskrevet stacken, og siden da er der kommet nogle yderligere ting [...]