Beste games aller tijden - The final countdown!
Wednesday, December 28, 2011

Zoals ik in mijn vorige post al aangaf, zou ik de top tien apart gaan benoemen. De tijd is inmiddels daar, aangezien deze lijst uiteraard wel voor 1 januari 2012 bekend dient te zijn. We beginnen bij de nummer 10, en werken zo onze weg naar 'boven'.

10. Final Fantasy VIII (PS, 1999)

Final Fantasy VIII was voor mij een game die ik kocht nadat deze allang uitgekomen was. Gelukkig nog nét niet in de Platinum verpakking, maar al wel stevig afgeprijsd. Toen ik eenmaal begon met spelen, was ik ook daadwerkelijk niet meer weg te slaan achter de Playstation. Lange uren gemaakt, en veel 'blocks' op de memorycard vergooid.

Het verhaal volgt in ieder geval de jonge Squall, die lid is van een soort elite-eenheid (SEED) van een soort Hogere School voor de magische zwaardenkunde ofzo (ook wel een Garden genoemd). Tijdens een van hun expedities gaat er iets verschrikkelijk fout, en ontmoet Squall een aantal medestudenten van andere 'Gardens'. Met zijn metgezellen gaat Squall dan vervolgens achter de oorzaak van de mislukte expeditie aan, en komt terecht in een oorlog tussen praktisch alles en iedereen.

Het mooie van dit spel vond ik de fantastische graphics, en dan met name van de bekroonde filmpjes (bijv. deze).

Final Fantasy VIII was voor mij de eerste Final Fantasy die ik speelde uit de reeks. Met name omdat ik doorgaans een hekel had aan de 'Grote hoofden - kleine lijven' signatuur die de spelcharacters hadden in de games.

Nadat alle 'Guardian Forces' verzameld waren, alle characters op level 100, en alle ultieme drankjes/zwaarden en spreuken waren verzameld, kon je jezelf opmaken voor een typisch Japans eindbazen gevecht, waarbij de HP nummers vaak over de miljoenen gingen.

Om deze redenen vind ik de tiende plaats een waardige plek voor deze topper.

09. Duke Nukem 3D (PC, 1996)

Duke Nukem 3D (Duke3d) was voor mij, en mijn broers en vader een van de meeste geweldige spellen. Met name de BUILD editor die bij de Atomic Edition zat, was echt helemaal te gek. Echter als je over het spel zelf nadenkt, was het eigenlijk helemaal niet zo fantastisch.

Het verhaal volgde Duke: een robuuste vrouwenverslinder met net zo'n grote gun in zijn broek als in zijn hand. Het gaat dus over deze Duke, die de 'wereld' (ofja, eigenlijk zijn wereld) moet redden van de Aliens. Deze hebben namelijk alle vrouwen gekidnapped. Dit kan uiteraard niet onbestraft blijven, en dus vecht Duke dit uit middels een arsenaal aan one-liners en wapens.

Qua geluid zat het dus wel goed, en we waren met name onder de indruk van het wapenarsenaal. Daarnaast waren de graphics voor die tijd de mooiste die er waren, dus we hadden uiteindelijk niet zoveel te klagen. Toen we uiteindelijk de cheatcodes hadden ontdekt (ik was immers 10 jaar bij de release), was het hek helemaal van de dam. Met oude 386, 486 en P133 machines was dit echt een genot om te spelen. Eerlijk is eerlijk, ik heb het laatst nog draaiend gekregen op een Windows 7 PC, wat toch echt een geweldige prestatie is al zeg ik het zelf. Nummer 09 dus, Duke Nukem 3D. Een echt tijdloze klassieker.

08. Transport Tycoon Deluxe (PC, 1995)

Chris Sawyer staat met name bekend om zijn grote Rollercoaster Tycoon serie. Echter is dit dus niet waar de 'Tycoon'-saga ooit begonnen is. Dit was veel eerder, namelijk in 1994, met het meesterlijke spel Transport Tycoon. In Transport Tycoon speelde je een opkomend transportbedrijf, in elke sector, waarbij je jezelf overeind moest zien te houden binnen de randvoorwaarden van elk level. Een opdracht kon er bijvoorbeeld zo uitzien: "Zorg ervoor dat je over 50 jaar een bedrijf hebt wat meer dan $25.000.000 waard is.". Dit leverde, naast de haast onbeperkte hoeveelheid aan transport voertuigen en methoden, een erg dynamisch spel op.

Dat was dus het basis principe, maar de Deluxe versie staat namelijk niet voor niets in de lijst. Deze had namelijk ten opzichte van zijn voorganger (het was hetzelfde spel, maar dan uitgebreider) een aantal mogelijkheden die ervoor zorgden dat het spel net wat meer 'af' aanvoelde. Zo was er bijvoorbeeld een level-editor, waarbij je je eigen werelden kon maken (met dus de meest optimale 'toevalligheden' zoals bijvoorbeeld grote leegruimten in een stad zodat daar een verschrikkelijk groot vliegveld paste), een uitgebreider scala aan voertuigen, meer scenario's die je kon spelen, en als laatste (maar zeker niet de minste) LAN mogelijkheden. Ik kan me nog goed herinneren dat ik dit tegen mijn oudere broer speelde, waarbij we de PC's aan lieten staan om maar zoveel mogelijk geld binnen te harken en steeds meer kleinere transportbedrijven (gespeeld door de computer) over konden nemen, met een waar imperium als gevolg.

Tegenwoordig is het praktisch onmogelijk om nog een orginele versie te draaien van dit spel, maar er zijn inmiddels wel alternatieven. Een paar jaar later zag Chris Sawyer namelijk het licht, en heeft Transport Tycoon Deluxe weer herbouwd, in de vorm van Locomotion (PC, 2004). Daarnaast bestaat er nog een open-source community, die Transport Tycoon hebben verbeterd (met betere AI en scenario generators). Deze kan je vinden onder de naam OpenTTD. Desalniettemin was de orginele Transport Tycoon Deluxe een fantastische ervaring. Ook een echte klassieker.

07. Unreal (PC, 1998)

Als je in 1998 het over een shooter had die alle grenzen verlegde, was het wel Unreal. Unreal was een spel wat er fantastisch uitzag voor zijn tijd, geweldige muziek had en voor de rest qua gameplay ontzettend goed in mekaar stak. Het was dan ook niet voor te stellen dat de ontwikkelstudio hier 4 jaar mee bezig was geweest (iets waar nu niemand meer van opkijkt, aangezien Duke Nukem Forever na 15 jaar is uitgekomen). In ieder geval, bij Unreal was het zo dat de echte multiplayer FPS van de grond kwam (in mijn optiek). Even later kwam het veel grotere Unreal Tournament uit, wat praktisch iedereen gespeeld heeft.

Omdat Unreal er zo gaaf uitzag, en het eigenlijk qua verhaal en sfeer sterk leek op de nummer 6, en die elementen combineerde tot iets geweldigs, verdient Unreal voor mij de (gedeelde) 7e plaats.

07. Black (PS2, 2006)

Een van de laatste games die uitkwam voor de Playstation 2, en die ik heb gekocht, was toch wel Black. Dit spel had het allemaal: spanning (echt verschrikkelijk spannend), realisme (kapotschieten van muren etc), sfeer, verhaal (het was nog een hele discussie geweest of ze dit een spel of een film zouden maken), en de inmiddels alom bekende "Epische Film Factor". Wat ik met dat laatste bedoel, zijn de goed uitgewerkte Triggers in het spel (je komt ergens, en er gebeurt iets). Denk hierbij onder andere aan Half Life 2, Crysis, Call of Duty 4: Modern Warfare, etc. Black was in ieder geval een prachtig spel om te spelen, en zeker een van de weinigen die ik nog op zou pakken wanneer ik de PS2 weer aan zou sluiten. Superspel. En daarom een (gedeelde) 7e plaats.

06. Quake 2 (PC, 1997)

Eigenlijk kan ik hier vrij kort over zijn: Hoe f*cking fantastisch was Quake 2? Het had alle gave elementen van Quake (welke ik een totaal andere game vind), maar met een minder medieval character, waardoor het minder op een Hexen/Doom kloon leek, en nu eindelijk een zelfstandige shooter was. Ik ben van mening dat Quake 2 de fundering was voor latere games zoals bijvoorbeeld Halo. Nadat je Quake 2 had uitgespeeld, wilde je ook gewoon weer meer Quake 2 spelen. Dit spel verveelde nooit. Wanneer je weer opnieuw begon vanaf je neergestortte ruimtesonde in 'die ene kamer', en je vervolgens in de volgende kamer de eerste Grunt het leven ontnam, je eerste granaat weer oppakte, etc, etc: het gaf altijd weer een gevoel van voldoening. Overigens had Quake 2 met stip de beste handgranaten ooit. Mocht je nog niet overtuigd zijn, kijk dan maar even naar deze gameplay.

05. Guitar Hero 5 (XBOX360, 2009)

Guitar Hero. een concept wat eigenlijk niemand (en met name ik) niet kon begrijpen dat dat ooit leuk zou worden. Ik weet nog dat ik Pascal (mijn broer) helemaal belachelijk maakte omdat hij Guitar Hero 3 had gekocht voor de XBOX 360. Toch maar even geprobeerd, en naar verloop van tijd ook mijn eigen XBOX 360 aangeschaft. Na 1 dag wilde ik Guitar Hero, en de rest is verleden tijd. Van kwaad kwam tot erger, en het is zelf zo erg geworden dat ik op dit moment de volgende Guitar Hero's heb: Guitar Hero 3, Guitar Hero 4 (PC, XBOX versie van Pascal geleend en uiteraard uitgespeeld), Guitar Hero 5, Guitar Hero 6, Band Hero, Guitar Hero: Van Halen, Guitar Hero: Metallica, Guitar Hero: Greatest Hits (mijn review op Gamespot). 7 dus op de XBOX 360, en 1 op pc.

Dit alles heeft uiteindelijk geleid tot het onthutsende feit dat ik "Through the Fire and Flames" van Dragonforce eerder uit had gespeeld op Hard in Guitar Hero 3 dan Pascal.

En serieus, het gevoel van euforie dat je hebt als je voor het eerst met bloed, zweet en tranen de solo's verslaat in dat nummer is echt onbeschrijfelijk. Vervolgens bel je je broer dus op om het nieuws te vertellen, en dan krijg je als reactie: "Oh. Leuk.". :P Herinner het me nog redelijk goed dus.

Maargoed, Guitar Hero 5 is daarentegen de allerbeste uit de serie. Met mijn inmiddels insane grote playlist (wanneer je die van GH6 erbij optelt heb ik bijna 400 nummers), en genoeg ervaring onder de gordel en een nieuwe gitaar onderweg, kan ik niet anders dan zeggen dat ik niet kan wachten om het weer te spelen. Nummer 5 op de lijst dus, Guitar Hero 5.

04. Half Life 2 (PC, 2004)

Hoe gaaf was Half Life 2? Het spel is zo goed, dat ik het laatst nog op mijn PC heb uitgespeeld. Zo gaaf is Half Life 2. Het verhaal, de actie, de sfeer, de stijl van de game. Alles klopt. En zelfs nu nog zijn het nog niet eens zo heel slechte graphics. Tuurlijk is Half Life 2 allang voorbij ingehaald op grafisch gebied, maar dat neemt niet weg dat het er nog steeds best aardig uitziet. Daarnaast, mijn favoriete zombie-passage allertijden uit een spel: Ravenholm. Dit gecombineerd met een van de beste machinegeweer geluiden allertijden maakt Half Life 2 een geweldig spel. Nummer 4: Half Life 2.

03. Guild Wars (PC, 2005)

Mijn character in Guild Wars

Massive Multiplayer Online Role Playing Game, oftewel: MMORPG, is een genre wat gedomineerd word door het alom bekende World of Warcraft (WoW). Geloof het of niet, maar ik heb dat spel nog nooit gespeeld, en ben dat ook niet van plan. In plaats daarvan heb ik me in dit genre bezig gehouden met Guild Wars. Guild Wars (GW) is een MMORPG die vrij veel gelijkenissen toont met WoW, maar zich onderscheidt door het intensieve samenspel in plaats van individualisme en strijd tegen mekaar. In GW speel je een held die de wereld (Tyria) moet redden van een paar tovenaars (ofzoiets.. ben het vergeten). Daarvoor dien je een aantal missies uit te voeren, en uiteindelijk kan je de baas verslaan. Iedereen dus happy aan het einde. En dan? Wat kan je dan nog doen? Nou, veel. Heel veel. Je kan de hele wereld nog gaan ontdekken, daarnaast allerhande sidequests uitvoeren, dungeons uitkammen, slimme handel proberen op te zetten (en zo andere spelers uitbuiten), je character nog sterker maken, extra wapens verzamelen, en nu komt het: Een Guild starten.

Je zou een Guild (gilde) kunnen zien als een groepje mensen die samen strijden tegen andere Guilds. Deze kunnen hun eigen kasteel (Guildhall) kopen, en daarin wordt de strijd beslecht. Nu moet ik zeggen dat ik niet zoveel met PvP (Player vs Player) heb gedaan, en het leuker vond om samen met Pascal (virtueel) op pad te gaan, om zo de duurste items, de beste skills (spreuken etc) te pakken te krijgen.

Ik kan nog wel uren doorgaan over dit spel, maar kenners van het genre weten dat een MMORPG ontzettend verslavend kan zijn (zit bijna aan de 1000 uur speeltijd na 6 jaar). een van de beste spellen allertijden. Guild Wars (incl. alle uitbreidingen) is een waardige nummer 3.

02. Gran Turismo (PS, 1998)

Do I need to say more? Michiel (mijn broer) en ik hadden hier vroeger een term voor: het zogenaamde "GT gevoel". Wanneer je dit filmpje kijkt, gegarandeerd dat je dat ook krijgt.

Naast dat dit spel natuurlijk ongelooflijk veel heeft bijgedragen aan mijn algemene kennis van auto's, was het grafisch fantastisch voor die tijd, en eerlijk is eerlijk; Je wilde elke auto in het spel (en dat zijn er 295) hebben / rijden / opvoeren tot het maximaal mogelijke. Gran Turismo heb ik vorig jaar nog gekocht (orgineel, in het plastic) voor 5 euro. Het bijna beste spel ooit gemaakt.

01. Grand Theft Auto III (PS2, 2001)

En daar issie dan: De nummer 1. Ik ben blij dat ik nu eindelijk toegekomen ben aan deze titel, want ik heb bijna 8 uur gedaan over het schrijven van deze blogpost, en ben er wel zo'n beetje klaar mee (ik schrijf ze ook gewoon in kale HTML, maar daar kom ik in een latere post wel weer eens een keer op terug).

In ieder geval, Grand Theft Auto III (GTA3). Het beste spel ooit gemaakt. 'Waarom?' denk je wellicht. Nou, GTA3 was voor mij het spel waarvan mijn mond destijds het meest openviel. Ik was nog nooit zo verbaasd dat 'ze' (Rockstar in dit geval) een spel konden maken, waarbij een complete stad (!) werd nagebootst. En dat dan ook nog eens in 3D! Ja, je had Driver, en Driver 2, maar om ook daadwerkelijk fatsoenlijk uit te kunnen stappen en mensen in 3D om kon leggen en vervolgens wegscheuren in een of andere vuilniswagen, dat was toch echt helemaal de bom.

Toen het spel dus uitkwam, kon ik mezelf niet langer bedwingen, en heb ik het meteen gekocht. Wat ik zo vet vond aan de voorganger (Grand Theft Auto 2) waren de radiozenders. Deze waren weer uitermate strak in deze versie, en daar kwam bij dat deze een ijzersterk verhaal had. Even 'fot the record': Ik heb GTA3 dus 2 keer gekocht (PS2, PC). Daarnaast heb ik ook alle andere varianten van GTA gekocht op de PS2 die gebruik maakten van dezelfde engine: Grand Theft Auto III, Grand Theft Auto: vice City, Grand Theft Auto: San Andreas, Grand Theft Auto: Liberty City Stories, Grand Theft Auto: vice City Stories. 5 GTA's dus. Maar deze steekt daar met kop en schouders bovenuit.

Het spel had alles: geweldige graphics, geweldige soundtrack, geweldige cutscenes (filmpjes zoals deze), geweldige actie, vrijheid, en oneindige mogelijkheden om vrij te spelen. Fantastische game. 10/10 punten, de absolute nummer 1. De PC versie krijgt van mij nog een punt hoger, omdat de toch al fantastische controls nog beter waren op PC.

Dus, there you have it. De beste games allertijden. Uiteraard weet ik niet wat de toekomst ons nog verder gaat bieden, maar tot dusver een ijzersterke lijst denk ik.

Reageer

Beste games aller tijden
Sunday, December 11, 2011

Het is weer het einde van het jaar. Tijd voor de meesten om weer lijstjes te gaan maken. Of het nu is voor Sinterklaas of voor Kerst, of gewoon omdat je bepaalde zaken vind (De tien/twintig/dertig/veertig/vijftig/honderd/vijfhonderd/duizend/tweeduizend beste x van het jaar). Ik heb zelf nog nooit een lijstje gemaakt. Tot nu. Naar mijn gevoel is de tijd nu rijp om nog even wat games onder de aandacht te brengen. Gelukkig (voor ons) zal dit een vrij tijdloze lijst zijn, en zullen er maar weinig titels toegevoegd kunnen worden aan deze lijst. Je hebt het waarschijnlijk al geraden:

De tien beste games Aller Tijden

Naast dat ik uiteraard de top tien zo direct door zal nemen, zijn er echter nog een aantal games die ik noemenswaardig vind, en ook genomineerd waren voor op de lijst. De lijst is op basis van mijn persoonlijke voorkeur (waarvan kreeg ik het meest een 'Yeah' gevoel), en tijdsduur (hoelang heb ik ze daadwerkelijk gespeeld). Ik kan er wel bij vermelden dat ik elke game (ongeacht of deze in de lijst staat) tot in de vroege uren heb doorgespeeld, en ook vrijwel alles uit elke game heb weten te halen.

Laten we beginnen met de nummers 31 tot en met 11. Waarom het er 31 zijn, komt straks aan de orde. Allereerst de lijst.

Zo. Dat waren de nummers 31 t/m 11. De reden dat het er 31 zijn, is gewoonweg omdat ik teveel games wilde noemen die niet in de top tien pasten. In ieder geval, in de volgende blog dus de definitieve top tien!

Reageer

Generic Argument - Een opvolging
Monday, November 28, 2011

Zoals ik in mijn vorige post beschreef, waren er een aantal problemen m.b.t. private accessors en de implementatie van generics binnen ons Framework. Het is na veel onderzoek uiteindelijk gebleken dat de oplossing was om een implementatie van een bepaalde interface niet toe te passen. Echter kwam er tijdens onze Framework-review uit (een presentatie van mijn aanpassingen binnen het Framework) dat dit toch een twijfelachtig punt bleek.

Nu had ik al aangegeven dat de Private Accessors, zoals we die momenteel kennen binnen C#, eruit gaan (ze zijn al gemarkeerd als ‘Obsolete’). De aanpassing die ik echter heb gedaan, is aan de andere kant wel erg gewenst, omdat dit zorgt voor een veel gemakkelijkere implementatie van standaardfunctionaliteit. Ook hoeven er dan géén Unittests meer geschreven te worden voor deze standaardclasses, aangezien deze al op framework-niveau worden getest.

Wat is dan een gemakkelijke oplossing om dit toch te kunnen doen, zonder dat het compileren faalt? Nu heeft Microsoft zelf al een oplossing geboden, door de mogelijkheid te bieden om alle members die als internal gemarkeerd zijn beschikbaar te maken aan andere assemblies (.dll en .exe bestanden). Het probleem is hier dan weer, dat je sommige private methods die we nu Unittesten via Private Accessors dan als internal gemarkeerd moeten worden. Dit is uiteraard niet de bedoeling, want we hebben deze niet voor niets als private gemarkeerd.

Die optie is dus ook komen te vervallen. De vraag is nu dus: Hoe kunnen we het framework nu goed unittesten wanneer we geen gebruik maken van deze Private accessors? Het antwoord ligt hem dan ook in de Private Accessors. Ik hoor je denken: "Huh? Je zei net, maar dan ook echt NET, dat dat dus het probleem is! Waarom zou je die dan toch gebruiken?!". De oplossing ligt vrij voor de hand: We (ik dus) schrij(f)(ven) onze eigen Accessor Generator tool voor ons(/elk) Framework. Hoe ik dit ga aanpakken is via Reflection.

Binnen het .Net Framework is er een namespace, System.Reflection, welke dit voor ons kan doen. We kunnen hiermee van elke class opvragen welke members er in zitten. Alle members. Dus ook private static readonly members. Of private static readonly members op een generic-constraint typed class.

Een intrigerend project dus, wat een avond of wat in beslag zal gaan nemen. Met name het unittesten van deze tool zal dan ook erg veel hoofdpijn geven vermoed ik, maar daar komen we ook wel overheen. Wanneer het klaar is, zal het waarschijnlijk een van de betere applicaties zijn die ik ooit gemaakt heb.

Reageer

Generic Argument
Friday, November 25, 2011

Een buitengewone prestatie al zeg ik het zelf. Momenteel ben ik bezig met de nieuwe, gestandariseerde, versie van een applicatie bij Driessen. Deze applicatie maakt gebruik van ons eigen Framework, wat volledig is gebaseerd op het Model-View-Presenter (MVP) principe. Deze applicatie (in het legacy Windows Forms) heeft dus ook automatisch als eigenschap dat deze het MVP principe implementeerd.

Dit werkt allemaal heel erg fantastisch, want het Framework en de applicatie zorgen er op die manier voor dat het niet uitmaakt wat voor een User Interface (UI) laag er op hangt. Het MVP principe is opgebouwd met behulp van zogenaamde generics. Een methodiek die ervoor zorgt dat classes zich anders gedragen wanneer ze een ander generiek type meekrijgen. Dit kan een interface zijn, maar ook een class die op zijn beurt weer generics implementeerd etc.

Stel je de applicatie als volgt voor: Je hebt een tabel met gegevens, en wanneer je op een bepaald record in de tabel klikt, opent er een zogenaamde editor. Deze editor is niets minder dan een bewerkvenster, waarin de gegevens van het record bewerkt kunnen worden. Deze editor is gedefinieerd in ons Framework, maar vraagt bij de implementatie een drietal generic parameters, namelijk je Model, View en Presenter classes voor dat type record.

Tijdens het bouwen van de applicatie dacht ik dus: Zou het wellicht niet handig zijn om alleen het type record mee te geven, en dat het Framework de rest afhandeld? Dus het Framework zou dan zorgen voor de (standaard)implementatie van het MVP principe, op basis van het type record (ook wel BaseClass genoemd). Ik ben, zoals het doorgaans meestal gaat, begonnen met het implementeren van deze functionaliteit binnen mijn applicatie. Dit bleek ook erg goed te werken, en het scheelde mij weer een hoop werk, aangezien ongeveer twaalf editors gebruik maken van dezelfde implementatie.

Nadat diverse collega’s hier naar gekeken hadden, en ik ook groen licht had gekregen van onze lead-developer, ben ik begonnen met de implementatie binnen het Framework. Eerst het Model overgezet, toen de Presenter, toen de standaardeditor. Daarna wilde ik direct de Unittests gaan implementeren (ik had deze immers ook al geschreven), en het resultaat presenteren aan mijn collega’s, zodat deze hier ook gebruik van kunnen gaan maken. Dus op een gegeven moment denk ik, ik ga de solution eens builden; Even kijken of Code Analysis nog iets roept..

“GenericArguments[0], 'TBaseClassType', on 'BaseClassBaseModel`1[TBaseClassType]' violates the constraint of type parameter 'TBaseClassType'.”

Geweldig sympathiek dat Code Analysis me daar van op de hoogte wilde stellen. Echter is het probleem dat deze Build Error (gelukkig) niet kwam binnen de assembly waarin de class stond, maar binnen de Test assembly, waarin de Unittests voor de assembly staan. Verwarrend he? Dus, even ter verduidelijking: in assembly A had ik de nieuwe class geïmplementeerd, maar de error kwam vanuit A.Test.

Wat bleek nou het geval? Binnen A.Test word er gebruik gemaakt van zogenaamde private accessors. Deze mappings zorgen ervoor dat alle private, protected en internal properties en methods beschikbaar worden gemaakt binnen je Unittest solution. Heel erg gemakkelijk dus. Na enige research op internet, werden mij een aantal zaken duidelijk:

  • Private Accessors zijn obsolete; Kortom: deze gaan eruit in toekomstige versies van .Net
  • Private Accessors kunnen niet overweg met generics in generics; Constraints noemen ze dat. Vandaar dat de Error dus van de A.Test assembly kwam in plaats van de A assembly zelf.

Mogelijke oplossingen zijn dus als volgt:

  • Unittests herschrijven, zodat deze geen gebruik meer maken van de private accessors. Dit is in mijn optiek de beste oplossing, maar is meer geschikt voor de lange termijn.
    • Microsoft heeft zelf ook al een ‘oplossing’ aangedragen als alternatief voor het gebruik van accessors. Binnen je AssemblyInfo.cs van je assembly, dien je een InternalsVisibleTo op te nemen, waarin je je Test assembly opgeeft waaraan je je internal, protected en private properties en methods beschikbaar stelt. Echter dien je er bij Strong Named Signed assemblies er rekening mee te houden dat er een PublicKeyToken meegegeven moet worden.
  • Een aantal nieuwe assemblies toevoegen aan ons Framework, die deze functionaliteit implementeerd. Uiteraard dienen hier geen private accessors voor gemaakt te worden.
  • Een eigen Accessor generator maken, die de daadwerkelijke taak van .Net overneemt voor het schrijven van de echte accessors (en niet de mappings).

De eindconclusie is dus dat het een verschrikkelijk irritant probleem is, waar Microsoft zelf rekening mee had moeten houden toen het generics in C# aan ging bieden. Ze hadden immers wel kunnen anticiperen dat er wellicht constraints zouden gaan ontstaan, en dat die ook voorzien zouden moeten worden van Unittests.

Het is dus maar hopen dat Microsoft dit nu eindelijk meeneemt in de volgende versies van Visual Studio en het .Net Framework. Het schijnt namelijk al sinds VS2005 bekend te zijn dat dit probleem er is. Anders hebben wij weer een hoop werk voor de komende tijd.


Update: 25 november 2011, 16:27. De solution build! Het bleek dat we onze generic type niet konden laten inheritten (afstammen) van een interface. Daarom hebben we voor de volgende implementatie gekozen, en verifiëren we ons type in de constructor van deze class.

public class BaseClassBaseModel<TBaseClassType> : BaseModel<BaseClassBaseModel<TBaseClassType>>
where TBaseClassType : class

In plaats van:

public class BaseClassBaseModel<TBaseClassType> : BaseModel<BaseClassBaseModel<TBaseClassType>>
where TBaseClassType : class, IBaseClass

Dank aan Stefan ;-)

Reageer

One down, five to go
Wednesday, November 09, 2011

Iedereen is uiteraard al op de hoogte, maar het is me gelukt om eindelijk het 70-511 examen binnen te tikken, met een score van 775/1000 punten. Uiteraard ben ik daar geweldig blij mee, aangezien ik nu verder kan met de volgende examens. Het eerstvolgende certificaat wat op de planning staat is 70-515 Web Applications Development with Microsoft .Net Framework 4. Web dus. Back to my roots zullen sommigen wel denken, aangezien ik jarenlang een webdeveloper ben geweest voor Ratho. Nu ik de eerste paar hoofdstukken gelezen heb, zijn er direct al een aantal zaken die me zijn opgevallen, waardoor mijn stijl van webapplicaties en websites bouwen zeker beïnvloed zal worden.

Zo heb ik gelezen over een hele slimme truc, waarmee het aantal requests (verzoeken) naar de webserver niet beperkt wordt, maar juist parallel neergezet wordt. Parallelism noemen ze dat ook wel. Het idee erachter is dat je dus voor je resources (bronnen zoals plaatjes, stylesheets, etc) een apart subdomein aanmaakt. Hierdoor laat je veel meer verzoeken naar dezelfde website toe, waardoor de browser dus vanaf meerdere kanten tegelijkertijd haar bronnen ontvangt, en dus ook sneller de webpagina kan opbouwen.

We nemen als voorbeeld even mijn website, http://eaverae.nl. Wanneer we er vanuit gaan dat elk (sub)domein tien requests tegelijk af kan handelen, kan je met een tweede subdomein, meteen 20 resources tegelijk aan. Met dit in het achterhoofd, zou je dus de volgende indeling kunnen maken:

  • http://Eaverae.nl (Hoofddomein, met daarin de default.aspx)
    • http://scripts.Eaverae.nl (subdomein, met daarin alle jQuery en javascript bestanden)
    • http://styles.Eaverae.nl (subdomein, met daarin alle css stylesheets)
    • http://images.Eaverae.nl (subdomein, met daarin alle afbeeldingen)
    • http://documents.Eaverae.nl (subdomein, met daarin alle documenten)
    • http://xml.Eaverae.nl (subdomein, met daarin alle xml-documenten)

Op deze manier creeër je dus een heel geordend structuur, ook in je domeinen. In navolging van dit blogbericht, ga ik dit uiteraard zelf uitproberen, al zal dat wel even op zich wachten. Hiervoor dien ik namelijk eerst de verschillende subdomeinen aan te maken, en alle referenties in mijn website te corrigeren.

Ik probeer in ieder geval begin 2012 op examen te gaan, en dan ook dit tweede certificaat binnen te halen. Voor nu kan ik nog even genieten van de winst van het eerste examen.

Reageer

Archief Beste games aller tijden - The final countdown! Beste games aller tijden Generic Argument - Een opvolging Generic Argument One down, five to go if (445 + 572 == Fail) It's all coming together now Global Unique Identifier (GUID) Mango geïnstalleerd; Developer Registration Complete 29 maart 2010 - 22 juni 2011 De Personeelshop - Internal Server Error Windows 8 - Eindelijk uniformiteit? - als WPF test We moeten de taart eerlijk verdelen.. If Directory.Exists… Wat dan? Netwerkbeheer met PowerShell 2.0 op Windows Server 2008 R2 en Exchange Server 2010 - Deel 1: Introductie Ongelofelijk: You get what you deserve Voor wie de update van Internet Explorer gemist heeft Laatste keer.. New Horizons Een keer rond de wereld en verder.. Een nieuw jaar, een nieuwe site 2010 - Een decenium voorbij New York 2010 - De laatste dag.. New York 2010 - Wing wang wokkie; Chinees eet je met een stokkie. New York 2010 - "Imagine the shock and awe that those people had.." New York 2010 - Where were you on 9/11? New York 2010 - "Attention all units. We've got a 187 at 38 Cresent Street" New York 2010 - New York Passed New York 2010 - "Whatever you try to do, you have to get off that subway; You'll stab a baby, as long as you get off.." New York 2010 - "Hi, This is Kevin from appartment E7.." New York 2010 - "Everytime I try to get a little frisky with my wife, she shows me a picture of the kids." New York 2010 - "I could never have a ginger girlfriend. When we kiss people think we're brother and sister!" New York 2010 - "We've even got a smile for you New York!" New York 2010 - Gearriveerd New York 2010 - Voorbereiding New York 2010 Demonologic - Mindsupply Voor mijn liefste New York Ongelofelijk: A Journey Through Life Motto van het jaar Ongelofelijk