ASPNL logo (1 kb)
vrijdag 16 mei 2008




Microsoft MVP

.NET Codewise Community
overzicht | volgende >>

.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 z’n 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 scenario’s 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 pagina’s 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.

^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL