Freitag, 26. August 2011

Continuations in C#–Mein Ansatz

Ralf Westphal hat unter http://ralfw.blogspot.com/2011/08/jenseits-von-solid.html einen interessanten Artikel zum Thema Continuations veröffentlicht. Leider hört Ralf auf, bevor er den entstandenen Code lesbar gemacht hat.

Ich denke, man kann Continuations textuell in Code darstellen. Beim Lesen des Artikels hatte ich folgende Syntax im Kopf:

Mein Beispiel ist analog zu dem von Ralf. Der einzige Unterschied ist, dass mein Beispiel die Validierung der Order an ein spezialisiertes Objekt delegiert wird.

Dieser Code erfordert im Prinzip nur folgende Methoden:

Beide Methoden geben das übergebene Objekt wieder zurück, so dass die Sequenzen prinzipiell beliebig lang sein können. Das Prinzip ist folgendes: Wenn das übergebene Objekt null ist, passiert nichts, ansonsten wird die Operation ausgeführt. Die Extensionmethode “When” erhält von der Operation zusätzlich einen bool zurück. Ist dieser false, wird an die folgende Operation null übergeben und die Bearbeitung der Sequenz faktisch abgebrochen.

Allerdings kann man den Code noch ausbauen. Das werde ich in den nächsten Posts tun.

Der Code, dem dieser Post zugrunde liegt, befindet sich unter https://github.com/mzywitza/Monastry.Continuations/blob/Post_1/src/Monastry.Continuations.Tests/Class1.cs. Es ist nicht nötig, das komplette Repository zu klonen, da ich UppercuT verwende und das Projekt daher etwas größer ist. Zudem befindet sich der Code (noch) in komplett in der verlinkten Datei.