.NET 2.0: Het framework in vogelvlucht
Door Michiel van Otegem
18 december 2007
De vorige versie van het .NET Framework, versie 1.1, dateert uit februari 2003. Versie 1.0 was
een jaar eerder beschikbaar, en het verschil tussen beide versies zit in de details. Hetzelfde
geldt voor Visual Studio, dat slechts een upgrade kreeg om de wijzigingen in het framework te
kunnen ondersteunen. Met het .NET Framework 2.0 en Visual
Studio 2005, is dat wel even anders. Er is behoorlijk gesleuteld aan de kern van het .NET
Framework, de Common Language Runtime (CLR) die alle applicaties uitvoert, en er is enorm veel
nieuwe functionaliteit die het maken van Windows- en web applicaties makkelijker maakt.
Nieuw in de CLR
De CLR is op allerlei fronten behoorlijk aangepast. De meest in het oog springende wijzigingen
zijn ondersteuning voor 64-bit processoren en de mogelijkheid om de CLR te hosten in SQL Server
2005. De ondersteuning voor 64-bit processoren is een logische stap gezien de groei in deze markt,
en wordt ondersteund op de 64-bit versies van zowel Windows XP als Windows 2003 Server. Het
aardige is dat je bij het ontwikkelen van .NET applicaties niet specifiek rekening hoeft te houden
met het type processor. Je kunt applicaties ontwikkelen op een 32-bit machine, en deze compileren
voor 64-bit. Verder kan de 64-bit CLR ook 32-bit code uitvoeren, dus werken alle bestaande .NET
componenten ook op 64-bit machines.
Het hosten van de CLR in SQL Server 2005 biedt de mogelijkheid om business logica uit te laten
voeren binnen de database server. Dit is vooral handig in situaties waarin het onhandig is als er
eerst veel data over het netwerk moet voordat de business logica zn werk kan doen. Door de
CLR in de database te hosten, kunnen stored procedures, triggers, user defined functions, en user
defined types gemaakt worden met .NET code. Vervolgens kun je in T-SQL code gebruik maken van
hetgeen in .NET code gedefinieerd is. Dit maakt deze optie erg krachtig, maar er ligt echter wel
een gevaar op de loer, omdat SQL Server niet aan stabiliteit mag verliezen. Er is daarom veel
aandacht besteed aan de stabiliteit van de CLR, helemaal als deze binnen de context van de database
server uitgevoerd wordt. Hiervoor bevat de SQL Engine van SQL Server 2005 een zogenaamde Hosting
Layer, zoals te zien in Afbeelding 1, die eventuele problemen met de CLR moet afschermen.

Afbeelding 1, De CLR in SQL Server
Uiteraard zijn er ook veel wijzigingen en toevoegingen aan de CLR die minder tot de verbeelding
spreken, of in elke geval een kleinere impact hebben. Een aantal hiervan hebben te maken met de
snelheid van de CLR, en van de communicatie tussen verschillende applicaties (of in .NET termen
applicatie domeinen). Op termijn zou de CLR net zo snel moeten zijn als gecompileerde code. Dat
wordt in sommige situaties al waargemaakt, maar dit moet gaan gelden voor alle applicaties. Zover
is het nog niet, maar in versie 2.0 is de snelheid alweer beduidend verbeterd. De keuze voor
ontwikkelaars tussen .NET en onder andere Visual Basic 6.0 zal hierdoor sneller in het voordeel
van .NET uitvallen. Een extra steuntje in de rug is hierbij de ondersteuning van het zogenaamde
Edit & Continue. Dit biedt de mogelijkheid om tijdens het debuggen van code veranderingen in
de code aan te brengen, terwijl de applicatie loopt. Dit betekent dat je fouten die je ziet
aankomen al kunt opvangen door de code te wijzigen voordat de code die fout is bereikt wordt. Dit
was in Visual Basic 6.0 (pre .NET) ook al mogelijk, en was een gemis voor een hoop ontwikkelaars
die overstapten op .NET, omdat dit zeer veel tijd kan schelen in het ontwikkelproces. Oorspronkelijk
zou deze mogelijkheid er alleen komen voor Visual Basic .NET en C++, maar op veler verzoek biedt
C# deze mogelijkheid ook. Er is daarom besloten om deze functionaliteit in te bouwen in de CLR,
zodat niet iedere taal deze functionaliteit anders zou verzorgen, en andere talen er ook gebruik
van kunnen maken.
De laatste soort wijzigingen zijn die aan de taalondersteuning van de CLR. Dit betreft wijzigingen
die in principe voor elke taal die door de CLR uitgevoerd wordt gelden. Hieronder vallen uitbreidingen
aan de basis types die conversie van tekst naar andere typen versnelt en minder foutgevoelig maakt,
en ondersteuning voor generics. Generics zijn een soort code sjablonen die je kunt
toepassen op verschillende data typen. Zo kun je bijvoorbeeld een lijst van type X definiëren,
zodat in de lijst alleen elementen van dat type geplaatst kunnen worden. Voorheen kon dit ook wel,
maar moest je een eigen lijst klasse maken, die een conversie deed van het algemene object type
naar type X. Met behulp van generics is het schrijven van de klasse niet meer nodig, en is de
conversie van object naar type X ook niet meer nodig. Dit betekent ten eerste minder fouten tijdens
het schrijven van de code, en ten tweede een snelheidsverbetering doordat de conversie niet meer
gedaan hoeft te worden.
Meer functionaliteit
Niet specifiek een verbetering aan de CLR, maar wel iets dat daar nauw aan verwant is, zijn de
verbeteringen aan de Base Class Library (BCL), de bibliotheek met functionaliteit waarmee
geprogrammeerd wordt. Hieraan is ondersteuning toegevoegd voor null-bare typen. In .NET 1.x zijn
de basis typen zoals getallen zogenaamde value-types. Hierdoor is het niet mogelijk variabelen van
deze typen null (C#/C++, Nothing in Visual Basic) toe te kennen. Dit is niet echt handig als
gegevens uit een database gehaald worden, omdat het daarbij voor kan komen dat een element in een
rij geen waarde heeft. In de huidige versie moet je je enigszins in bochten wringen om hier
elegant mee om te kunnen gaan. De ondersteuning van null-bare typen maakt dit een stuk eenvoudiger.
Hiermee hangt samen dat ook op het front van data access, te weten ADO.NET, het een en ander veranderd is. Om te beginnen is ADO.NET 2.0 niet meer afhankelijk van de Microsoft Data Access Components (MDAC), het geen uitrol van applicaties vereenvoudigd. Verder is er een nieuw data access model, bekend als het Common Provider Model, waardoor het eenvoudiger wordt om data access code te schrijven die onafhankelijk is van de onderliggende provider, zonder dat dit ten koste gaat van de snelheid die afzonderlijke providers hebben bij het communiceren met de onderliggende gegevensbron. Sowieso is de snelheid van ADO.NET behoorlijk verbeterd, en is de ondersteuning voor een connected data model ook beter, daar waar voorheen het accent echt lag op scenarios waarbij de verbinding met de gegevensbron gesloten wordt na het ophalen van data, omdat vervolgens weer een verbinding te openen als er gegevens gewijzigd moeten worden.
Iets dat ontbrak in .NET 1.x was ondersteuning voor seriële poorten. Microsoft heeft ten onrechte gedacht dat seriële poorten niet meer zo belangrijk waren, en heeft deze ondersteuning oorspronkelijk uit het framework gelaten. Dit bleek al gauw een behoorlijke inschattingsfout, die helaas nu pas hersteld kon worden.
Nog een aardige toevoeging aan de BCL is een lichtgewicht transactie manager. Hierdoor is het niet
meer nodig om van Component Services (COM+) gebruik te maken als je transacties nodig hebt. Je
kunt een transactie context creëren waaronder alle code die je in die context uitvoert onderdeel
uitmaken van dezelfde transactie. Dit model is super eenvoudig en lijdt niet onder de complexiteit
die Component Services met zich meebrengt.
ASP.NET 2.0
ASP.NET 1.x was een ware revolutie op het gebied van website ontwikkeling, en dat geldt voor ASP.NET
2.0 weer net zo. Er is hard doorgewerkt na het verschijnen van versie 1.1 en dat is te zien.
ASP.NET is nu meer dan een gereedschapskist voor ontwikkelaars geworden. Het doet in veel denken
aan Microsoft Access, omdat het ontwikkelen van web applicaties binnen het bereik van de ervaren
gebruikers. Access heeft echter een slechte reputatie als het gaat om goede robuuste applicaties.
De functionaliteit die in ASP.NET 2.0 eenvoudig te realiseren is, is echter zo opgezet dat je
weinig fout kunt doen. Dit komt omdat er gewerkt wordt met een soort functieblokken die veel
voorkomende functionaliteit implementeren. Dit is overigens zeer flexibel gedaan, zodat je bij
voorbeeld als er een database nodig is kunt kiezen uit SQL Server en Microsoft Access (en in de
toekomst meer databases). De functieblokken kun je via de configuratie tool te zien in Afbeelding
2 opzetten, en vervolgens in paginas gebruik van maken. De meest voorkomende functionaliteit
is te realiseren zonder code, en andere functionaliteit vergt slechts enkele regels code. Wie denkt
dat dit geen ruimte meer laat voor ervaren ontwikkelaars heeft het mis. ASP.NET 2.0 biedt een
structuur van best practices waar ontwikkelaars op aan kunnen haken, maar je kunt net
zo goed een geheel eigen structuur kiezen en alles van de grond af zelf doen. Ook kun onderdelen
van ASP.NET vervangen door je eigen implementatie als je dat beter lijkt. Aan de ene kant is
ASP.NET 2.0 dus erg makkelijk, maar aan de andere kant zeer krachtig en flexibel.

Afbeelding 2, ASP.NET configuratie tool
Windows Forms
Met zoveel goede nieuwe dingen aan ASP.NET kunnen Windows applicaties, oftewel Windows Forms, niet
achter blijven. Toch moet gezegd worden dat ASP.NET voor ligt op Windows Forms. De oorzaak hiervan
is dat ASP.NET eigenlijk een van de eerste onderdelen van .NET is die gemaakt is, en er dus
gewoonweg meer tijd is geweest om ASP.NET 1.x te maken. Dat heeft een basis gelegd die er bij
Windows Forms nog niet echt goed was ten tijde van versie 1.x. In versie 2.0 is die basis wel
gelegd, en is het mogelijk om geweldig ogende applicaties te maken, waaronder applicaties met de
look & feel van Windows XP. Dit is het gevolg van een betere fundering voor Windows Forms, dat
sneller en beter kan tekenen en meer mogelijkheden biedt voor layout, en natuurlijk door de
ondersteuning van XP Visual Styles. Daarnaast zijn een behoorlijk aantal nieuwe controls toegevoegd,
waaronder de DataGridView, WebBrowser, en ToolStrip controls.
Een ander punt waar ASP.NET een streepje voor had was bij het uitrollen van applicaties. Dit is met
ASP.NET applicaties een kwestie van de bestanden kopiëren, maar dat ligt bij Windows Forms complexer.
Om dit op te lossen is ClickOnce ondersteuning toegevoegd. Hiermee kun je op eenvoudige wijze
applicaties publiceren via een web- of FTP server, een gedeelde map, of het bestandssysteem, zoals
je kunt zien in Afbeelding 3. Gebruikers kunnen bijvoorbeeld via een link de applicatie installeren, en
ervoor zorgen dat nieuwe versies automatisch geïnstalleerd worden (eventueel na bevestiging van de
gebruiker). In de ontwikkelomgeving zitten tools die de omgeving van de gebruiker goed simuleren,
zodat ontwikkelaars de applicatie onder dezelfde (beveiligings)omstandigheden kunnen uitvoeren als
reguliere gebruikers. Heel Visual Studio heeft overigens een metamorfose ondergaan, en is daardoor
veel makkelijker in gebruik. Bovendien zijn er nu ook instapversies die voor een klein bedrag
(of misschien zelfs gratis) te verkrijgen zijn onder de naam Visual Studio Express. Van de
verschillende Express producten kun je via http://msdn.microsoft.com/express
versies downloaden.
Afbeelding 3, ClickOnce configuratie
Veel meer
Er is zoveel verbeterd aan .NET 2.0 dat een artikel als dit er bijna geen recht aan doet, helemaal
als Visual Studio in de beschouwing meegenomen wordt. In komende artikelen wordt aan individuele
onderdelen van .NET 2.0 meer aandacht besteed. In de tussentijd kun je met de Express producten al
aardig experimenteren. Erg handzaam zijn daarbij de Walkthroughs, stap voor stap
instructies om bepaalde zaken te implementeren.
Dit artikel is eerder verschenen in NetOpus, januari/februari 2005.
|