Bart Reyserhove Castle Monorail in de praktijk EEN ANDERE KIJK OP HET BOUWEN VAN EEN WEBAPPLICATIE
Webforms is al geruime tijd de standaard als het gaat om het bouwen van webapplicaties. Dit wil echter niet zeg- gen dat er geen alternatieven zijn. In dit artikel bekijken we hoe we met behulp van Monorail op een andere manier webapplicaties kunnen bouwen. Belangrijk om vanaf het begin te weten is dat Monorail bovenop ASP.NET draait en alleen webforms vervangt.
onorail is een web application framework dat gebruik- daarna ook de view aanroepen die gebruikt wordt om de webpagi- maakt van het model-view-controller-patroon. Het Model na weer te geven. Aangezien Monorail bovenop ASP.NET draait, zal Mbevat de businessobjecten. In het geval van Monorail het ook voordeel halen uit de features ervan zoals Session Manage- kun je hier gebruikmaken van ActiveRecord, een object relational ment, Authentication/Authorization provider. mapper (ORM) die bovenop NHibernate is gebouwd. Je bent ech- ter niet verplicht om ActiveRecord te gebruiken, je kunt ook een Het model andere ORM gebruiken of met ADO.NET werken. De Controller is Hoog tijd dat we overgaan naar de praktijk. Om te beginnen dien uitsluitend verantwoordelijk voor de applicatieflow en de View is je Monorail te downloaden. Nadat je het hebt geïnstalleerd, zal je alleen begaan met de presentatielogica. Verder maakt Monorail ook zien dat bij het begin van een nieuw project in Visual Studio er een gebruik van een aantal principes uit Ruby On Rails. Convention nieuwe template beschikbaar is waarmee je een Monorail-project over configuration is daar het belangrijkste van. Dit wil zeggen dat kunt starten. De projectstructuur ziet er dan uit zoals in afbeelding je een aantal afspraken dient te kennen en dat je dan bijna niets 1. Vervolgens beginnen we met code te schrijven voor het Model. hoeft te configureren. Wijk je af van de afspraken, dan moet je Laten we voor het gemak even uitgaan van één tabel in onze data- extra code te schrijven. base ‘Wines’. De code van het model kun je bekijken in codevoor- beeld 1. Je ziet dat de klasse ‘Wine’ overerft van ActiveRecordVali- Een blik onder de motorkap dationBase. Dit zal ons toelaten om databaseoperaties te verrichten Monorail implementeert het ‘Front Controller’-patroon door op het object Wine. Verder zie je ook dat er attributen toegevoegd gebruik te maken van een eigen HttpHandler. Wanneer er een zijn aan de verschillende properties om ze te mappen naar kolom- request (bijvoorbeeld voor home/index.rails) binnenkomt, zal men in de database. Omdat we de klasse Wine hebben laten Monorail de url ontleden om de correcte methode aan te roepen overerven van ActiveRecordValidationBase kunnen we ook onmid- in de controller. In het geval van ‘home/index.rails’ zal dit de dellijk validatieregels op de properties plaatsen. In codevoorbeeld indexmethode zijn in de ‘home’ controller. De indexmethode is 1 zie je bijvoorbeeld dat ‘Naam’ een verplicht veld is. Later, in de verantwoordelijk voor de verdere verwerking van de request en zal code van de controller, zien we hoe je deze regels afdwingt. Nu is onze model klaar. Scaffolding Het model dat we juist hebben aangemaakt, gaan we nu gebruiken in de Controller. Daarvoor maken we een klasse aan die we Wine- Controller noemen. Met behulp van de scaffolding-functionaliteit van Monorail kunnen we nu automatisch webpagina’s genereren voor ons Wine-object. Scaffolding is ontleend aan Ruby On Rails, en wil zeggen dat je de compiler het model laat gebruiken om code te genereren, die je toelaat om de basis databaseoperaties op een object uit te voeren (create, read, update, delete). In codevoorbeeld 2 zie je hoe je dat kunt doen in Monorail. Als je nu met je brow- ser naar ‘wine/list.rails’ navigeert, krijg je de lijst van wijnen in de database te zien. Die zal in eerste instantie leeg zijn, maar de func- tionaliteit om wijnen toe te voegen, te editeren en te verwijderen is automatisch aanwezig. Door gebruik te maken van de scaffolding- functionaliteit kun je op een zeer snelle manier een eenvoudige webapplicatie bouwen, waarmee je een aantal testen kunt doen. Vanaf het moment dat je in de controller voor een bepaalde actie zelf code begint te schrijven, zal het framework die code gaan gebruiken en niet meer de standaard scaffoldingcode. Op die manier kun je zeer geleidelijk functionaliteit toevoegen aan jouw applicatie. Het is natuurlijk ook mogelijk om op de gewone manier Afbeelding 1. Projectstructuur in Solution Explorer te werken en hoe dat gaat, laten we zien in de volgende paragraaf.
.net magazine for developers #19 | december 2007 73 using Castle.ActiveRecord;
Create new wine
using Castle.Components.Validator; #if ($summary) namespace WineCellar.Data { #foreach ($errmessage in $summary.ErrorMessages) [ActiveRecord] $errmessage
public class Wine : ActiveRecordValidationBase
74 .net magazine for developers #19 | december 2007 aantrekkelijke user-interfaces bouwen met Ajax. Monorail beschikt
Lijst van wijnen
kortom over een groot aantal troeven waardoor het leven van eenNr. | boeiende gemeenschap er zich achter dit open source frameworkNaam | bevindt.Appelation |
---|---|---|
$velocityCount | $!{wine.name} | $!{wine.appelation} |
De PropertyBag wordt door Monorail gebruikt om variabelen naar Referenties de View door te geven. In de View kunnen we deze dan aanroepen Front Controller Pattern: http://msdn2.microsoft.com/en-us/library/ms978723.aspx met behulp van het $-teken; zie codevoorbeeld 5. Download Castle Monorail: http://www.castleproject.org/castle/download.html Wiki met tal van voorbeelden: http://using.castleproject.org/dashboard.action Troeven Blog van de stichter van Castle Project: http://hammett.castleproject.org/ Dit artikel beschrijft maar een zeer klein gedeelte van de moge- Blog met tal van Monorail posts: http://www.ayende.com/Blog/ lijkheden die Monorail biedt en het zou te ver leiden om alle Een eenvoudig wijnkelderbeheerssysteem gebaseerd op Monorail: http://code.google. mogelijkheden op te sommen. Monorail beschikt ook over functi- com/p/winecellarmanager/ onaliteit om masterpages in te bouwen en om met user-controls te Ajax Scaffolding met Monorail: http://danbunea.blogspot.com/2006/12/ajax-scaf werken. Je kunt ook zeer gemakkelijk meertaligheid inbouwen of folding-with-castle-monorail.html
BEN JIJ ER OP TIJD BIJ?
De Caesar Groep levert gegarandeerd op tijd opgeleverde ICT-projecten (TimeValue). Wij hebben 300 medewerkers, verdeeld over expertisecentra waaronder Microsoft. Ons dienstenpakket bestaat uit projecten, detachering en beheer. Wij willen de beste werkgever zijn, wat uitstekende arbeidsvoorwaarden, uitgebreide studiemogelijkheden en uitdagend werk binnen een open en informele sfeer inhoudt. Bovendien behoort Caesar volgens Intermediair tot de top 3 van bedrijven waar medewerkers het meest tevreden zijn!
WIJ ZOEKEN EEN: .NET Developer
FUNCTIEOMSCHRIJVING Je werkt in een enthousiast team van ons expertisecentrum Microsoft van ongeveer 50 man. Je bent voornamelijk bezig in projectteams van of voor klanten. Je bent verantwoordelijk voor de bouw van uitdagende en innovatieve onderdelen van het eindproduct, gebaseerd op de laatste Microsoft .NET technologie. Hierbij hoort het ontwerpen en/of ontwikkelen in .NET.
PROFIEL GESCHIKTE KANDIDAAT Afgeronde HBO- of WO-opleiding. Enkele jaren ervaring in .NET. In bezit zijn van een MCSD / MCTS-certificaat is een pré. Je bent een teamplayer en resultaatgericht en hebt een analytisch denkvermogen. Je bent liever met de oplossing dan met de projectorganisatie en administratie bezig.
INTERESSE? Stuur jouw CV met motivatie naar [email protected]. Kijk voor meer informatie op www.caesar.nl/werken.
ICT-PROJECTEN GEGARANDEERD OP TIJD OPGELEVERD! SOMMIGEN BELOVEN HET. WIJ GARANDEREN HET! .net magazine for developers #19 | december 2007 Caesar Groep - Zonnebaan 9 - 3542 EA Utrecht - tel. 030 - 240 42 00 - www.caesar.nl - [email protected]