.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Mai 2012

Nested Types und XAML-Syntax

31.05.2012 07:06:00 | Martin Hey

Ich gebe zu, ich bin kein großer Freund von Nested Types, da sie an einigen Stellen umständlicher zu behandeln sind als Typen, die "ganz normal" in Namespaces liegen. Aber es soll API-Hersteller geben, die Nested Types verwenden. Um dann nicht Dinge mehrfach entwickeln zu müssen, bietet es sich an, diese Typen gleich weiterzuverwenden.

Was ist ein Nested Type?

Das ist recht einfach erklärt: Ein Nested Type ist ein Datentyp, der in einem anderen Datentyp deklariert ist - also eine Klassendefinition innerhalb einer anderen Klasse und eben nicht direkt in einem Namespace. Das folgende Beispiel soll das etwas verdeutlichen:

public class Constants
{
    public class Colors
    {
        public const string Red = "#FF0000";
        public const string Green = "#00FF00";
        public const string Blue = "#0000FF";
    }

    public class Alignments
    {
        public const string Left = "Left";
        public const string Right = "Right";
    }
}

Zugriff im Code

Der Zugriff im Code ist ähnlich wie wenn die Klasse in einem Namespace liegt - man verwendet die Punkt-Syntax.

var color = Constants.Colors.Blue;

Zu beachten ist hier lediglich, dass man sich ab dem obersten Typ durch die Struktur hangeln muss und eben nicht wie im Fall von Namespaces eine using-Direktive verwenden kann. Ok, einen Trick gibt es doch - man kann einen Alias für den Typ vergeben:

using ColorConstants = Constants.Colors;

public class MainViewModel
{
    public MainViewModel()
    {
        LoadData();
    }

    public void LoadData()
    {
        var color = ColorConstants.Blue;
    }
}

Zugriff im XAML

In meinem Beispiel handelt es sich um Konstanten, auf die ich im XAML auch gern im statischen Kontext zugreifen möchte . Dafür bietet sich x:Static an. Verwende ich hier die gleiche Syntax wie im Code, so erhalte ich eine Fehlermeldung die besagt, dass der Typ nicht gefunden werden kann.

Alles kein Problem - dabei handelt es sich nämlich um einen Syntaxfehler. Der Zugriff auf Nested Types erfolgt nicht mit "." sondern mit "+". Korrekt ist es also wie folgt:

<TextBlock Text="{x:Static local:Constants+Colors.Blue}" />

Damit funktioniert der Zugriff nun zur Laufzeit, und auch in Expression Blend wird alles korrekt angezeigt. Aber ab diesem Zeitpunkt streikt nun der Designer von Visual Studio.

Englische Version Englische Version

Vortrag "Sicherheit mit der Cloud" am 11.06. in Berlin

29.05.2012 09:23:00 | Peter Kirchner

Unsere Vortragsabende zum Thema “Sicherheit mit der Cloud” erfreuen sich hoher Beliebtheit, was uns natürlich sehr freut! Erstmalig werden wir nun auch in Berlin diesen Vortrag anbieten. Dieses Mal allerdings eingebettet als Vortrag in unser Programm für Startups.

Die Teilnahme ist auch dieses Mal wieder kostenlos, eine Anmeldung ist allerdings notwendig, damit wir mit den Kapazitäten planen können.

Diese Abendveranstaltung widmet sich dem Thema Sicherheit mit der Cloud und bietet Raum, über Ihre grundlegenden Fragen zu rechtlichen Sicherheitsthemen im Zusammenhang mit der Cloud - im speziellen Windows Azure - zu diskutieren. Während und nach den Vorträgen wird es Gelegenheit geben, sich mit den Fachreferenten und Teilnehmern auszutauschen.

15:00

Begrüßung & Einführung

Peter Kirchner,
Program Manager ISV,
Microsoft Deutschland

15:15 – 17:00

Cloud Computing - aber sicher!

Prof. Dr. Peter Bräutigam,
Rechtsanwalt & Fachanwalt für IT-Recht,
Noerr LLP

Vortrag "Cloud Computing - aber sicher!"
Der rasant wachsende Erfolg von Cloud Computing ist eine Herausforderung für das nationale europäische und internationale Recht. Dies gilt namentlich für das Datenschutzrecht. Um diese Herausforderung zu meistern, tun die Akteure gut daran, mit den Mitteln, die das Cloud Computing eröffnet, eine Umgebung berechtigten Vertrauens für die Kunden zu schaffen. Dabei gilt es zum einen, Vorurteile - wie die Argumentation "Patriot Act" - zu entmystifizieren, zum anderen aber, aktiv für sichere und vertrauenswürdig zertifizierte Infrastrukturen zu sorgen, diese einem regelmäßigen Update- und Review-Prozess zu unterziehen und all das transparent zu kommunizieren. So ermächtigt die Industrie die Kunden dazu, informierte, selbstständige Entscheidungen zu treffen. Dieser proaktive Ansatz sollte mit einer pragmatischen Rechtsanwendung und geeigneten Initiativen, um der notwendigen Rechtsfortbildung den Weg zu ebnen, einhergehen.

Zur Anmeldung gelangen Sie hier.

Silverlight Tipp der Woche: async-basierte Silverlight Web-Services

25.05.2012 21:10:00 | Stefan Lange

Silverlight Tipp der Woche: async basierte Silverlight Web-Services

In diesem Tipp geht es um die Verwendung vom neuen C# 5 Schlüsselwort async beim Aufruf von Web-Services in Silverlight.

Zusammenfassung

async und await machen asynchronen Code wesentlich übersichtlicher, weil sie dessen logische Struktur erhalten. Das hilft vor allem beim Aufruf von Web-Services. In Silverlight sind Web-Service Referenzen von Hause aus aber leider nicht „awaitable“. Hier wird erklärt, wie es trotzdem geht.

(Dieser Artikel setzt die Arbeitsweise von async und await als bekannt voraus.)

Aufruf von asynchronem Code

Wer schon mal mit den neuen C# 5 Schlüsselworten async und await programmiert hat, fragt sich sehr schnell, wie er denn bisher ohne diese leben konnte.

In Visual Studio 2010 werden sie durch die Async CTP Version 3 für alle Arten von .NET Projekten zur Verfügung gestellt.

In Visual Studio 11 sind sie als Compiler-Feature bereits enthalten und in .NET 4.5 Projekten auch unmittelbar verfügbar. Für .NET 4 und Silverlight 5 Projekte muss zunächst noch das Microsoft.CompilerServices.AsyncTargetingPack via NuGet dazu installiert werden.

Vor allem beim Aufruf von asynchronen Web-Service-Funktionen in Silverlight kommt die neue Schreibweise wie gerufen. Im Prinzip könnte man jetzt folgendes schreiben:

var result1 = await client.DoThisAsync("Hallo");
var result2 = await client.DoThatAsync(result1, 43);

Keine Callbacks, keine Lambdas, kein Spaghetti-Code mit Error und UserState Properties. Nur zwei intuitive Zeilen Code, die exakt das machen, was man unmittelbar beim Lesen des Codes erwartet. Das ist schon phantastisch. Leider steht diese Schreibweise für Web-Services nicht unmittelbar zur Verfügung.

Das Problem

Die bisher generierten asynchronen Web-Service-Funktionen kann man natürlich nicht mit async verwenden, denn Funktionen, die „awaitable“ sein wollen, müssen ein Task- oder Task<T>-Objekt zurückgeben. Für bestehende Klassen wie WebClient gibt es daher Extension-Methods wie DownloadStringTaskAsync als Variante von DownloadStringAsync, die ein Task<string> zurückliefert.

Beim Import von Service-Referenzen müssten also eigentlich nur anders aufgebaute Funktionen generiert werden. Diese Funktionen müssten Task-Objekte zurückgeben und dafür würden die ganzen Completed-Handler und deren EventArgs wegfallen. Für .NET 4.5 Projekte wurde dazu in Visual Studio 11 eine neue Option beim Importieren eingeführt: „Generate task-based operations“. Diese Option generiert alternative Funktionen, die man mit await verwenden kann. Für Silverlight oder .NET Projekte kleiner als 4.5 ist diese Option allerdings nicht verfügbar. Hier der Sceenshot für ein Silverlight 5 Projekt:

Die Option ist grau. Und in Visual Studio 2010 geht das natürlich sowieso nicht.

Die Lösung

Beim Importieren eines Web-Services generiert einem der Compiler ja schon asynchrone Funktionen mit jeweils einem Completed-Handler. Vielleicht kann man den Code ja irgendwie wiederverwenden. Bei meinem Versuch die generierten Funktionen mit Hilfe eines Expression-Trees zu zerlegen, um dann mit Reflection die Funktionen des darunterliegenden Channels aufzurufen, habe ich eine sehr viel einfachere Lösung gefunden.

Nehmen wir zur Erläuterung einen WCF-Webservice mit drei typischen Funktionen:

public void DoAction(string s, double d, DateTime t) …
public string DoThis(string s) …
public int DoThat(string s, int n) …

Dieser Service wird wie üblich in einer Web-Anwendung implementiert und über „Add Service Reference“ zum Silverlight Projekt unter dem Namen Service1 hinzugefügt. Der Compiler generiert daraus diverse Dateien, die man auch sehen kann, wenn für das Projekt „Show All Files“ aktiv ist. Eine der generierten Dateien ist Reference.cs, die wiederum u.a. die Klasse Service1Client enthält. Service1Client enthält die private Unterklasse Service1ClientChannel, eine typsichere Implementierung des Servicecontracts unseres Webservices. Und hier können wir ansetzen, denn der Servicecontract ist auf Basis des BeginInvoke/EndInvoke Patterns implementiert. Dieses Pattern wurde bereits in .NET 1.0 eingeführt und benötigt für jede asynchrone Operation zwei Funktionen, die als Paar immer den Namenskonventionen BeginXxx und EndXxx folgen. BeginXxx liefert ein IAsyncResult zur Überwachung der asynchronen Operation und EndXxx nimmt nach deren Beendigung ein IAsyncResult entgegen und extrahiert daraus den Rückgabewert. Die wesentlich neuere Klasse Task verfügt über eine Kompatibilitätsmethode FromAsync, die asynchrone Operationen, die über ein solches async-Pattern bereitgestellt werden, in ein Task-Objekt umwandelt.

Da Service1Client freundlicherweise als partial deklariert ist, brauchen wir die Klasse nur um drei neue Funktionen in der gewünschten Form ergänzen:

public partial class Service1Client
{
  public Task DoActionTaskAsync(string s, double d, DateTime t)
  {
    return Task.Factory.FromAsync(Channel.BeginDoAction(s, d, t, null, null), Channel.EndDoAction);
  }
 
  public Task<string> DoThisTaskAsync(string s)
  {
    return Task<string>.Factory.FromAsync(Channel.BeginDoThis(s, null, null), Channel.EndDoThis);
  }
 
  public Task<int> DoThatTaskAsync(string s, int n)
  {
    return Task<int>.Factory.FromAsync(Channel.BeginDoThat(s, n, null, null), Channel.EndDoThat);
  }
}

Das Muster ist leicht zu erkennen. In die Funktion FromAsync werden das Ergebnis des Aufrufs der BeginXxx-Funktion sowie ein Delegate auf EndXxx reingereicht. Die beiden letzten Parameter der BeginXxx-Funktionen sind übrigens immer ein AsyncCallback und ein User-State Objekt. Beide sind null, da wir sie hier nicht benötigen.

Da alle Servicefunktionen bereits unter den Namen XxxAsync existieren, habe ich sie analog zu oben erwähnten Extension-Methods von WebClient in XxxTaskAsync umbenannt. Alternativ könnte man auch eine neue Klasse von Service1Client ableiten und die bisherigen Funktionsnamen mit new überschreiben. Das Ganze mit Extention Methods zu machen funktioniert hingegen nicht, weil die Property Channel protected ist.

Mit verhältnismäßig wenig Tipparbeit können wir jetzt doch unseren Code von oben schreiben:

var result1 = await client.DoThisTaskAsync("Hallo");
var result2 = await client.DoThatTaskAsync(result1, 43);

Die zweite Funktion wird mit dem Ergebnis der ersten aufgerufen, ganz natürlich und ohne Klimmzüge.

Das hintereinander Aufrufen von asynchronen Funktionen ist aber nur die Spitze des Eisbergs. Auch der folgende (hier inhaltlich unsinnige) Code ist möglich:

string result = null;
try
{
  var client = new Service1Client();
  if (await client.DoThatTaskAsync("xxx", 43) > 123)
    result = await client.DoThisTaskAsync("Hallo");
  else
  {
    await client.DoActionTaskAsync("yyy", 4.5, DateTime.Now);
    int x = 321;
    while ((x = await client.DoThatTaskAsync("zzz", x)) < 42)
      result += await client.DoThisTaskAsync(x.ToString("0"));
  }
}
catch (Exception ex)
{
  Debug.WriteLine(ex.Message);
}

Ein try-Block um asynchrone Funktionen, die sich innerhalb beliebiger Kontrollstrukturen befinden! Und eine Exception auf dem Server landet stets sauber beim Client im catch-Block.

Wer immer noch nicht von async/await restlos begeistert ist, sollte mal versuchen, den Code oben mit den bisherigen Mitteln zu schreiben. Insbesondere wegen des try-catch-Blocks ist dies eine sehr schwierige Übung.

Noch ein technischer Hinweis: Das Erzeugen des Task-Objektes führt zur Erzeugung eines zusätzlichen Threads, der auf das WaitHandle von IAsyncResult wartet. Dies hat aber praktisch keinerlei Laufzeitrelevanz. Der Thread wird einmal im Threadpool erzeugt und dann wiederverwendet. Die überwiegende Zeit wartet er auf die Fertigstellung der asynchronen Operation. Danach benachrichtigt er den Main-Thread, damit dieser hinter dem await weitermacht.

Fazit

„Fast und fluid“ war Silverlight ja immer schon. Mit async/await und den selbst gekapselten Task-basierten Service-Operationen haben wir nun auch in Silverlight, was mit der Windows Runtime der neue Standard werden wird. Und es funktioniert so gut, dass ich schon fast vergessen habe, wie ich es bisher ohne await gemacht habe.

Hier der Beispielcode zum Ausprobieren:

TaskBasedWebOperations.zip (61 kB)

Das war der System Management Summit 2012

25.05.2012 04:30:00 | Lars Keller

Am 09.05.12 war der 6. System Management Summit (SMS) 2012 in Hanau. Ich war mit Arbeitskollegen als Referent und Microsoft Partner vor Ort. Auf der SMS wurden die neuen System Center (SC) 2012 Produkte in Microsoft Systemmanagement Summit 2012 - Lars KellerDeutschland vorgestellt. Wir, das Research & Development Team, beschäftigen uns sehr intensiv mit den verschiedenen System Center Produkten und deren Unterstützung für einen Aufbau einer Hybrid Cloud Infrastruktur. Auch als Entwickler lernt man diese Produkte näher kennen, denn alle Produkte haben eine WebService-API. ;-)

Meine Kollegen aus dem Infrastruktur Bereich berichten ausführlich über alle neuen System Center Features, Tipps & Tricks in ihrem Blog, so dass ich den interessierten Leser darauf verweise.

Als Referent durfte ich einen Vortrag zum Thema “Von 0 auf Cloud - Privat Cloud in 45 Minuten – VM Deployment über die (fast) gesamte System Center Suite 2012” halten.  Mein Kollege und ich haben verdeutlicht, wie einfach Cloud Computing sein kann, wenn die Prozesse klar definiertMicrosoft Systemmanagement Summit 2012 - Lars Keller sind und System Center im Hintergrund läuft. In dem Vortrag selber haben wir zum ersten Mal auf einer Konferenz auch einen Einblick in das von meinem Team entwickelte Self-Service-Portal gegeben. Mit dem Self-Service-Portal wird die Hybrid Cloud Infrastruktur von Nicht-Administratoren administriert und verschiedene Prozesse z.B. “Buchen von Software für einen Mitarbeiter von Kostenstellenverantwortlichen” angestoßen. Das Portal verwaltet u.a. die Lizenzen, Provisionierung und Budgetierung dieser Software. Interessierte Leser können sich unsere Session anschauen, sobald diese in den nächsten Wochen veröffentlicht wird. [UPDATE: Die Session ist online.] 

Für mich war die SMS sehr spannend, besonders weil ich als Entwickler auf einer IT-Pro Konferenz sprechen durfte. ;-)

Ich denke, wie in den Jahren davor, wird H&D beim nächsten System Management Summit wieder vor Ort sein!

Visual Studio 11 Beta QuickHit Videos Vol.7 (Coded UI Test, Load und Performance Tests, Eclipse Integration (TEE), Feedback Client)

24.05.2012 13:52:41 | Christian Binder

Testing ist für viele Teams ein fester Bestandteil der Softwareentwicklung. Hier zeigen wir in zwei kurzen Videos den Coded UI Test zum automatisierten Testen von UI’s und die Load und Performance Tests. Zudem den Team Explorer Everywhere, welcher die Eclipse Integration für den TFS mitbringt und den neuen Feedback Client, der es dem Development Team sehr einfach ermöglicht, Feedback zur Implementierung einzuholen. Vor Allem für Agile Teams ein wichtiger Aspekt aber auch für andere Teams interessant, die kontinuierlich und strukturiert Feedback einholen wollen. Viel Spass

Visual Studio 11 Beta - Coded UI Test | Microsoft

Visual Studio 11 Beta - Last- und Performancetests | Microsoft

Visual Studio 11 Beta - Team Explorer Everywhere | Microsoft

Visual Studio 11 Beta - Feedback Client | Microsoft

MongoDB Stored Javascript from Node.JS

24.05.2012 12:52:00 | Andreas Mehl

This is just a simple example of creating and using Stored Javascripts in MongoDB and calling it from Node.js.

1. Already there

You should have installed mongodb, node.js and it also should running.

Add in your MongoDB 2 Datasets with a column ertrag as Int.

 

2. Create Node.js app

In your node.js app.js create following:

var Db = require('mongodb').Db;
var Server = require('mongodb').Server;

var db = new Db('test', new Server('127.0.0.1', 27017, {}));

db.open(function (err, pClient) {
    db.eval("gesamtertrag()", function (error, result) {
        console.log(result);

        db.close();
    });
});


3. Create Stored Javascript

in MongoVue create a new Stored Javascript with name "gesamtertrag" with following code:

function () {
	var a = 0;
	db.test_insert.find().forEach(
	 function(data) {
	 	a += data.ertrag;
	  	//print(student.name + "<p>"); 
	 } );
	 return a;
}

if you now start the app.js you will see the result.

UpToDate? Veranstaltungen für .NET Entwickler der .NET Developer Group Ulm

24.05.2012 11:21:35 | Christian Binder


Die .NET Community im Raum Ulm läd ein :

Code Camp (01.06.2012 - 02.06.2012)

clip_image001

Das Ziel des Code Camps ist, Erfahrungen mit anderen Entwicklern auszutauschen, neu Praktiken zu erlernen und vor allem viel Spaß miteinander zu haben. Als Aufgabenstellung wollen wir die Usergroup-Homepage neu implementieren und sowohl Web- als auch Desktop-Entwicklern ein entsprechendes Betätigungsfeld zu geben.

Detaillierte Informationen finden Sie hier…

SCRUMit Summit 2012 (19.06.2012)

clip_image002

Nach der tollen Resonanz der Veranstaltung im vorigen Jahr gibt es nun eine Fortsetzung der Reihe. Wir laden Sie herzlich ein zum SCRUMit Summit 2012!
Nutzen Sie diese Möglichkeit des Austausches zwischen Experten und Gleichgesinnten über Best Practices und Erfahrungen mit agiler Software-Entwicklung. Wie können wir die Potentiale des agilen Projektmanagements noch effizienter nutzen? Wie können die Herausforderungen in der täglichen Anwendung von Scrum besser bewältigt werden? Welche nützlichen Tipps und Tools gibt es zu dieser Thematik? Antworten auf diese und weitere Fragen, Erfolgsrezepte und Praxistipps präsentieren hochkarätige Speaker auf dem SCRUMit Summit 2012.

Detaillierte Informationen zu den Vortr��gen und Sprechern finden Sie hier…

VS 2011 ALM Info Day (01.08.2012)

Visual Studio 11

Mit Visual Studio 11 und Team Foundation Server stellt Microsoft die nächste Version seiner ALM-Plattform vor. Dabei wurden insbesondere häufig vermisste Funktionen für agile Teams nachgerüstet. Diese und viele andere Verbesserungen werden an diesem Tag vorgestellt.

Detaillierte Informationen zu den Vorträgen und Sprechern finden Sie hier…

„Consumer Preview eBook“ zu Windows 8 von Charles Petzold

22.05.2012 09:35:00 | Stefan Lange

„Programming Windows“ von Charles Petzold ist immer noch das Standardwerk zum Windows API. Jetzt, rund 25 Jahre nach der Erstausgabe, schreibt der Autor an der 6. Fassung. Inhaltlich ist das Buch allerdings aufgrund der Windows Runtime ein kompletter Neuanfang. Entwickler brauchen aber nicht bis zum Herbst auf die Fertigstellung zu warten, sondern können den aktuellen Stand schon jetzt als eBook kaufen.

Mit sieben Kapiteln und etwa 300 Seiten hat das Werk jetzt ca. ein Drittel des geplanten Umfangs. Der Beispielcode im Buch ist in C# geschrieben und kann nach dem Kauf heruntergeladen werden. Zusätzlich gibt es auch eine C++/CX Version aller Beispielsprogramme.

Bis Ende Mai kann man das eBook für 10 Dollar kaufen, danach wird es stufenweise teurer. Weitere Updates bis zum fertigen Buch sind in diesem Preis inbegriffen.

Der Autor

Es gibt zwei Dinge, die ich an Petzold besonders schätze. Zum einen kann er hervorragend erklären. Durch sein Buch „3D Programming for Windows“ habe ich beispielsweise zum ersten Mal wirklich verstanden, was Quaternionen sind und wie man damit rechnet. Zum anderen geht er auf viele Details ein und experimentiert mit den APIs. Antworten zu komplizierten WPF Problemen habe ich fast immer in seinem Buch gefunden und nicht in meinen beiden anderen WPF Büchern. Dass manche seinen Stil kritisieren, weil er sehr penibel systematisch erklärt und oft ins Detail geht, kann ich nicht so ganz nachvollziehen. Für mich ist gerade das ein Vorzug des Autors.

Das Buch

Das Buch behandelt ausschließlich die neue Windows Runtime zur Erstellung von Metro Apps. Die bisherigen 7 Kapitel sind wie gewohnt gut strukturiert und mit vielen farbigen Quellcodeauszügen und Screenshots angereichert. Vorkenntnisse in WPF oder Silverlight werden nicht vorausgesetzt. Wer sie allerdings hat, kann sein Wissen praktisch vollständig wiederverwenden. Zum Buch gehören aktuell 79 Beispielprogramme (jeweils in C# und C++/CX).

Auf mich macht diese Preview Version einen guten Eindruck und wird wahrscheinlich zu einem umfassenden Werk zu den technischen Aspekten der Windows Metro App-Programmierung anwachsen. 10 Dollar ist ein fairer Preis und auch der Kauf bei oreilly.com verlief problemlos.

Hier der Link zu Petzolds Blog-Artikel

.NET-Architektur mit dem Beispiel „GoFish“ – Development–Erstellen von Workflow Activities

17.05.2012 18:15:15 | Gregor Biswanger

gofish-1_thumb1_thumbIn der letzten Folge dieser Architektur-Serie, haben wir die Phasen Design und Development kennengelernt. Bei der Design-Phase wurden die jeweiligen Prozesse zu Komponenten abstrahiert. Aus den Komponenten entstanden die jeweiligen Schichten und Contracts (Interfaces). Auch wenn der Punkt Development nicht komplett abgeschlossen wurde, somit ist zumindest die Hauptlogik durch TDD implementiert worden.

In diesem Teil wird die Development-Phase fortgesetzt, womit das Ziel mit dem Spiel „GoFish“ immer näher rückt.

 

Erstellen von Workflow Foundation Activities

Erst einmal kommt die Frage auf, wofür die Workflow Foundation verwenden? Die Workflow Foundation ist eine Art Framework für Geschäftslogik. Das Verhalten und die Verwendung der jeweiligen Prozesse werden visuell dargestellt. Gerade bei größeren Änderungen der Geschäftslogik ist eine visuelle Darstellung geradezu ideal. Es ist ersichtlicher ein paar Bausteine auszutauschen als Methoden und deren IF-Statements zu durchforsten. Außerdem kann man seine eigenen Komponenten ohne hohen Aufwand zu Activities erweitern. Sollte irgendwann zur Projektlaufzeit doch wieder auf klassischen Code gewechselt werden wollen, kann man einfach die Activities wieder löschen und die eigenen Komponenten bleiben unberührt. Activities dienen demnach als Adapter- oder Fassade-Pattern (siehe das Entwurfsmuster Adapterund Entwurfsmuster Fassade).

In der Design-Phase wurde das Komponentendiagramm entworfen. Dieses beschreibt bereits die jeweiligen Activities für die Geschäftslogik. Das Komponentendiagramm wurde anhand des Ablaufdiagramms abstrahiert.

image

Abbildung 1 – Das Komponentendiagramm mit den gewünschten Activities.

Das Komponentendiagramm beschreibt die zu benötigten Activities:

  • AddCardsToPlayerActivity.cs
  • FindQuartetsActivity.cs
  • GetCardFromStackActivity.cs
  • GetCardsActivity.cs
  • GetSameCardValuesActivity.cs
  • GetTheWinnerActivity.cs
  • RemoveCardsActivity.cs
  • SelectRandomCardActivity.cs
  • SharedCardsToPlayerActivity.cs

 

Die Grundlagen für das Erstellen von Workflow Activities habe ich bereits gebloggt bzw. Microsoft Webcasts veröffentlicht. Es wird von der Basisklasse CodeActivity abgeleitet und das Input / Output via Arguments definiert. Das Input / Output entnehmen wir vom DomainModel.

Als Häuptling entspricht hier der GamblingTable, der als Aggregate (Domain-Driven Design) für die Entities Player und Card dient. Aggregate sind Zusammenfassungen von Entitäten und Wertobjekten und deren Assoziationen untereinander zu einer gemeinsamen transaktionalen Einheit.

Beim Spiel stehen für alle Activities dann alle relevanten Daten zur Verfügung. So entwarf ich je nach Anforderungen den I/O folgendermaßen:

AddCardsToPlayerActivity

  • IN PlayerCards
  • IN CardsToAdd
  • OUT ResultPlayerCards

FindQuartetsActivity

  • IN PlayerCards
  • OUT ResultQuartets

GetCardFromStackActivity

  • IN CardDeck
  • IN PlayerCards
  • OUT ResultCardDeck
  • OUT ResultPlayerCards

GetCardsActivity

  • OUT Result (List<Card>)

GetSameCardValuesActivity

  • IN PlayerCards
  • IN SelectedCard
  • OUT SameValueCards

GetTheWinnerActivity

  • IN Players
  • OUT Result (string)

RemoveCardsActivity

  • IN PlayerCards
  • IN CardsForDelete
  • OUT ResultPlayerCards

SelectRandomCardActivity

  • IN PlayerCards
  • OUT Result (Card)

SharedCardsToPlayerActivity

  • IN Cards
  • IN Players
  • OUT CardsResult
  • OUT PlayersResult

Und hier sind die Implementierungen der Activities:

 

AddCardsToPlayerActivity

 

   1:  using System.Activities;
   2:  using System.Collections.Generic;
   3:  using GoFish.Common.Entities;
   4:   
   5:  namespace GoFish.Domain.Activities
   6:  {
   7:      public class AddCardsToPlayerActivity : CodeActivity
   8:      {
   9:          [RequiredArgument]
  10:          public InArgument<List<Card>> PlayerCards { get; set; }
  11:          
  12:          [RequiredArgument]
  13:          public InArgument<List<Card>> CardsToAdd { get; set; }
  14:   
  15:          [RequiredArgument]
  16:          public OutArgument<List<Card>> ResultPlayerCards { get; set; }
  17:   
  18:          protected override void Execute(CodeActivityContext context)
  19:          {
  20:              List<Card> playerCards = PlayerCards.Get(context);
  21:              List<Card> cardsToAdd = CardsToAdd.Get(context);
  22:   
  23:              cardsToAdd.ForEach(playerCards.Add);
  24:   
  25:              ResultPlayerCards.Set(context, playerCards);
  26:          }
  27:      }
  28:  }

 

Zusammenfassung und Vorschau auf den nächsten Teil

Jetzt sind die wichtigsten Funktionen/Aktivitäten als eigenständige Workflow Activities gekapselt. Diese könnten nun nachträglich mit Unit-Tests abgesichert werden. Jedoch reicht mir für diese Architektur-Serie der TDD-Part (siehe letzte Folge).

Beim nächsten Teil werden wir die Development-Phase fortsetzen und alle Bausteine (Activities) zu Workflows zusammenführen. Sodass, das Aktivitätsdiagramm aus der Design-Phase implementiert wird.

Viel Spaß und bis zur nächsten Folge, wenn Ihr mögt!

Handouts zu “MS Test der missverstandene Stiefbruder”

17.05.2012 10:47:12 | Hendrik Loesch

Ich finde es immer äußerst unbefriedigend wenn ich eine gute Präsentation vollgestopft mit Rhetorik und Wissen sehe, aber drei Tage später kaum noch die wichtigsten darin genannten Infos aufzählen kann. Deshalb hier der Vortrag von der DDC noch einmal in Form eines detailierten Handouts, dem man auch Informationen entnehmen können sollte wenn man nicht dabei [...]

C++ Day 2012 : Windows 8 für C++ Entwickler

16.05.2012 12:25:21 | Christian Binder

 

cplusplus_tour2-gelb

Update : Slides und Demos finden Sie hier zum Download.

Nach einem sehr erfolgreichen ersten C++Day dieses Jahr und einer sehr gut besuchten ADC C++ möchten wir weiter kontinuierlich Themen für C++ Entwickler anbieten. Daher laden wir zu einem weiteren kostenfreien C++ Day 2012 mit dem folgenden Schwerpunkten  ein:

Windows 8 für C++ Entwickler”, um die neuen sehr guten Möglichkeiten für C++ Entwickler mit Windows 8 zu beleuchten. 
ALM für C++ Entwickler”, für alle C++ Entwickler, die Ihre Entwicklungs Infrastruktur optimieren möchten.

Wann? und Wo?

14.6 Berlin Anmeldung
18.6 Unterschleißheim Anmeldung
25.6 Köln Anmeldung
26.6 Bad Homburg Anmeldung
3.7 Blaustein Anmeldung

Agenda:

14:00 – 15:15 Windows 8 Metro Style Apps mit C++
15:15 – 15:30 Pause
15:30 – 16:45 WinRT für C++ Entwickler
16:45 – 17:15 Pause
17:15 – 18:30 ALM in C++ Projekten
18:30 – 19:00 Q/A

Vortäge:

Windows 8 Metro Style Apps mit C++ und XAML

Unter Windows 8 erhält nun auch der C++ Programmierer die Möglichkeit optisch modernste Benutzerschnittstellen mit XAML zu „deklarieren“ und auf die Windows Runtime (WinRT) zurückzugreifen. Somit steht für Windows 8 Metro Style Apps erstmals ein neues UI Framework zur Verfügung. Dieser Vortrag vermittelt Ihnen die wesentlichen Grundlagen zu Windows 8 Metro Style Apps mit dem dazugehörigen Interaktionsmodell und zeigt, wie Sie mit Visual C++ und XAML eigene Metro Apps erstellen können. Das Konzept des App Stores rundet den Vortrag ab.

WinRT für C++ Entwickler

Die Windows Runtime (WinRT) ist die neue Library für Metro Style Apps. Mit native C++ lassen sich Komponenten und Treiber für WinRT und damit für Metro Style Apps erstellen. Hierfür hat Microsoft die C++ Syntax wie bereits für C++ /CLI erweitert, es steht nun C++ /CX zur Verfügung. Erfahren Sie in diesem Vortrag, wie Sie mit Visual C++ WinRT Komponenten erstellen und in Metro Apps verwenden können. Ein besonderer Fokus wird dabei auch auf die C++ /CX Spracherweiterungen gesetzt. Eine Abgrenzung von C++ /CX zu C++ /CLI und C# rundet diesen Vortrag ab.

 ALM in C++ Projekten

Im C++ Umfeld werden bislang häufig bis auf Version Control nur vereinzelt weitere Bausteine des ALM verwendet, obwohl es hierfür aus technischer Sicht keine Gründe gibt. Dieser Vortrag richtet sich daher an alle Entwickler, die bislang auf die Vorzüge der Integration der unterschiedlichen ALM Aspekte in Team Foundation Server verzichtet haben. Anhand eines überschaubaren Beispiels wird die Arbeit mit Visual Studio 11 und Team Foundation Server 11 von der Definition eines Requirements, über die Implementierung und die Integration von automatisierten Tests in den zentralen Build Prozess bis hin zum Management von Bugs veranschaulicht. Abschließend gibt der Vortag einen kompakten Ausblick auf die für C++ Entwickler relevanten Neuerungen mit TFS 11.


Der Referent

imageimage

Thomas Trotzki ist ALM Consultant bei der artiso AG nahe Ulm und Microsoft-C++-Profi der ersten Stunde.

Mit Microsoft C++ und den MFC beschäftigt er sich intensiv seit den ersten Beta-Versionen zu Microsoft C/C++ 7.0, also bereits vor der Geburtsstunde von Visual C++ und Visual Studio.

Technologisch ist er neben C++ und den MFC auch mit COM/DCOM und der gesamten „Managed Welt“ vertraut und hat umfangreiche Expertise im Application Lifecycle Management. Zurzeit betreut er Kunden bei der Einführung von Microsoft Team Foundation Server und berät bei der Etablierung eines Application Lifecycle Management in deren Entwicklungsabteilungen

Dotnet Developers Conference 2012 – Eine subjektive Zusammenfassung

15.05.2012 23:05:21 | Hendrik Loesch

Zwei Tage DDC liegen hinter mir. Übermüdet und voller neuer Eindrücke sitze ich nun in einem Regionalexpress nach Dresden der hoffentlich auch irgendwann einmal ankommt, vielen Dank Deutsche Bahn für die bescheidene Anbindung. Gefühlte 95% der Zeit war ich dabei als üblicher Teilnehmer unterwegs. Die einzigen Unterscheidungsmerkmale gegenüber der Allgemeinheit waren das rote Bändchen am [...]

C++ Webcasts zu C++ 11, Going Parallel und ALM

15.05.2012 15:45:11 | Christian Binder

Im Rahmen der ersten C++ Days in diesem Jahr haben wir die Inhalte auch als Webcasts zur Verfügung gestellt.
Die Demos und Slides zum C++ Day gibt es hier.  Viel Spass

C++11 : Modernes C++ im 21. Jahrhundert

C++ bleibt aktuell – neue Sprachfeatures machen den nativen Klassiker fit für neue Herausforderungen. Dieser Vortrag gibt Ihnen einen Überblick über die wesentlichsten Neuerungen in C++ 11 – wie beispielsweise Smartpointer mit Reference-Counting (shared_ptr), Lambda-Expressions, neue Container-Klassen, Iteratoren und Sprachkonstrukte wie for_each sowie RValue References.

Parallel Power in VC++ 11 Beta

Effektive parallele Programmierung erhöht die Performance in vielen Fällen drastisch, braucht aber das richtige Know-How und spezialisierte Tools. Denn bei stetig steigender Anzahl an Cores und CPUs wird es immer wichtiger, das Anwendungsmodell in Richtung Skalierbarkeit hinsichtlich Multiprocessing auszulegen. Auch das Debugging bietet einige Herausforderungen. Verschaffen Sie sich einen Überblick über die neuen Konzepte rund um Parallelisierung in Windows API, Concurrency Runtime und Visual Studio.

Visual Studio ALM 11 Beta für C++ Entwickler

Visual Studio ALM 11 bringt für "C++"-Teams einige Neuerungen. Dashboards unterstützen Teams vom Backlog über die Sprint-Planung bis zum täglichen Standup. Code Review Support und VS Context Switching macht Team Collaboration mit TFS 11 besser denn je. Neues natives "C++"-Unittesting und "Architecture Discovery" ist nun auch für native C++ verfügbar. Dieser Webcast greift einige der Änderungen für "C++"-Entwickler auf.

SQL Server Data Tools Workshop in Bad Homburg

14.05.2012 15:58:09 | Christian Binder

image

Am 2. Juli veranstalten wir einen Workshop zu den SQL Server Data Tools. Gerd Drapers Principal Group Program Manager SQL Server wird mit Kollegen diesen Tagesworkshop halten. Gerd ist im Kontext der TechEd in Europa und wir konnten Ihn für diesen Workshop exklusiv nach Deutschland holen. Also ein einmalige Chance sich mit den Entwicklern der SQL Server Data Tools auszutauschen. Leider haben wir nur eine begrenzte Anzahl an Plätzen zur Verfügung.

Zur Anmeldung und den Details geht’s hier.

Artikel in der aktuellen dotnetpro

14.05.2012 11:46:00 | Jörg Neumann

In der aktuellen dotnetpro (6/2012) sind gleich drei Artikel von mir zum Fokusthema WPF erschienen.

  • Mächtig zugelegt - .NET 4.5: Neuerungen für WPF-Entwickler
    Das nächste .NET Framework erweitert die Windows Presentation Foundation an wichtigen Stellen. Verbesserungen gibt es vor allem in Sachen Datenbindung, Threads und XAML.
  • Auf Sherlock Holmes’ Spuren: Fehlerdiagnose mit WPF
    In komplexen WPF/.NET-Anwendungen gibt es eine Menge potenzieller Fehlerquellen. Dafür sollten aussagekräftige und fehlergerechte Formen der Anzeige parat stehen.
  • Flexible Oberflächen: WPF Layout-Techniken
    Die Gestaltung XAML-basierter Oberflächen ist eine zeitaufwendige und von Entwicklern oft ungeliebte Aufgabe. Dieser Artikel zeigt, wie Sie den Layout-Prozess effizienter gestalten können.

dnp_062012

00001111 - Die 15-Jahres-Konferenz von ppedv - wir sehen uns in Burghausen am 14. Mai 2012

10.05.2012 15:49:20 | Kay Giza

Burghausen? In Burghausen gibt es viel zu entdecken: Das Highlight ist die längste Burg Europas, die umrahmt wird von Salzach und Wöhrsee. Die Altstadt mit historischen Häuserzeilen mit herrschaftlichen Fassaden und mediterranen Gassen, liegt zu Füßen der Burg. Und natürlich die 00001111 - die 15 Jahre Konferenz von ppedv, eine Jubiläums-Konferenz zum 15-jährigen Bestehen der PPEDV AG. Ich freue mich sehr, vor Ort beim Firmen-Geburtstag dabei zu sein und sogar mit zwei Vorträgen vertreten sein zu dürfen... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

MSDN Online fuer Entwickler optimiert mit neuen Funktionen [Fruehjahrsputz 2012 im Microsoft Developer Network]

09.05.2012 15:30:04 | Kay Giza

In der letzten Woche hat das MSDN Online Team - dass den Webauftritt von Microsoft für Entwickler betreut, MSDN Online ein neues Gesicht verpasst. Eine ganze Reihe von Änderungen wurden während des Frühjahrsputzes umgesetzt, auf die ich Sie - den Bloglesern von Giza-Blog.de, gerne aufmerksam machen möchte... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

Sicherheitsbestaetigung fuer Microsoft Office 365: FISMA-Zertifikat

05.05.2012 14:51:16 | Kay Giza

Office 365 hat in dieser Woche eine 'Sicherheitszulassung' für die Verwendung in US-amerikanischen Behörden erhalten. Die Vorgaben des Federal Information Security Management Acts (FISMA) setzen verpflichtende Standards im Bereich der Informationssicherheit für den öffentlichen Sektor. Neben dieser FISMA-Zertifizierung, die auch Microsofts Cloud-Infrastruktur bereits seit Ende 2010 innehat, ist hierzulande natürlich erheblich interessanter... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

Visual Studio 11 Beta QuickHit Videos Vol.6 (Neue VS IDE, Neuer Team Explorer, TFS Team Build, C++ AMP)

04.05.2012 14:36:00 | Christian Binder

Die Neue VS IDE bringt neben dem Design auch neue Funktionen im  Solution Explorer und Team Explorer mit, die jedem Developer das Leben einfacher machen. Zwei kurze Videos zeigen einige Aspekte.  Im dritten Video stehen die Neuerungen TFS Team Build im Vordergrund. Und im letzten Video, stellen wir C++ AMP vor. Viel Spass

Visual Studio 11 Beta - Die neue IDE

Visual Studio 11 Beta - Der neue Team Explorer

Visual Studio 11 Beta - Team Foundation Build in TFS 11 Beta

Visual Studio 11 Beta - GPU Programmierung mit C++ AMP

Microsoft: Support fuer kleine Unternehmen (neues Support-Portal)

03.05.2012 09:21:19 | Kay Giza

Seit dem 1. Mai 2012 findet man auf den Microsoft Webseiten ein Support-Portal vor, speziell auf die Anforderungen und Bedürfnisse von kleinen Unternehmen optimiert und eingerichtet. Microsoft-Supportportal für kleine Unternehmen Neben einfachen Lösungsansätzen für spezielle Problemstellungen, wie man diese löst und behebt, wie man schnell und einfach Hilfe aus der Community oder von Microsoft erhält, muss man auf folgende sehr hilfreiche und informative Hilfestellungen hinweisen: Finden Sie schnell... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

150 Nokia Phones gratis fuer die besten Ideen und Konzepte fuer Windows Phone Apps

02.05.2012 13:45:45 | Kay Giza

150 Nokia Phones werden verschenkt? Die Entwicklung von Apps für Smartphones und Tablet-PCs wird immer mehr zum festen Bestandteil einer ganzheitlichen Dienstleistung. Und dies nicht mehr nur für große- und mittelständische Unternehmen. Wie sieht aktuell die technologische Entwicklung aus? Welche Konzepte und Strategien werden verfolgt? Welcher Aufwand steckt in der Entwicklung? Und welches Framework nehme ich am besten? Diese und weitere Fragen werden beim MMT 30 von den Experten geklärt... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2013 Kay Giza. All rights reserved. Legal

H&D Talk: Windows 8 Consumer Preview

02.05.2012 07:00:00 | Lars Keller

Eine neue Folge von H&D Talk ist erschienen. Dieses Mal schauen Karim und ich die Windows 8 Consumer Preview Version an.

Was gibt es Neues seit der Windows 8 Developer Preview?

Link: http://www.hud.de/innovativ/windows/hd-talk-win-8-consumer/

Die Folgen zur Windows 8 Developer Preview findet Ihr hier: www.windows-8-preview.de

Feedback zu den Filmen ist willkommen! :-)

Windows-8-Hackathon @Night

02.05.2012 06:44:00 | Lars Keller

Unsere Kollegen von der .NET User Group Leipzig veranstalten den ersten Windows-8-Hackathon. Dieser findet in Leipzig am 15.6. 19 Uhr – 16.6.2012 7 Uhr statt. Bei der Durchführung unterstützen nicht nur wir von der .NET Developer Group Braunschweig, sondern auch die User Group Kollegen von ALT.NET Berlin  und .NET User Group Dresden.

Was ist ein Hackathon? – Eine Antwort gibt Torsten Weber:

Ziel des Windows-8-Hackathons ist die Entwicklung einer Anwendung für Windows 8 noch während der Veranstaltung. Voraussetzung für die Teilnahme am Windows-8-Hackathon ist ein eigenes Notebook mit installierter Windows 8 Customer Preview sowie Visual Studio 11 Express (bzw. per Virtual Machine).

Zum Start gibt es eine kurz Zusammenfassung der wichtigsten Leistungsmerkmale von Windows 8, die bei Anwendungen dafür eine Rolle spielen. Beim Codieren der Anwendung unterstützen z. B. Dariusz Parys und Tom Wendel von Microsoft Deutschland. Am Ende der Veranstaltung werden alle Projekte untereinander vorgestellt, egal, ob diese fertig sind oder nicht.

Der Windows-8-Hackathon startet spätabends, geht in die Nacht hinein und lohnt sich natürlich auch für Einsteiger, die sich vor Ort als Gruppe zusammenschließen können. Für Einsteiger gibt es vorbereitete Aufgabenstellungen, wie z. B. der Programmierung eines Spieles. Damit alle Teilnehmer die gleichen Grundlagen für die Zusammenarbeit im Team haben, gibt es vorher eine Einführung in die Grundlagen von Git. Erste Ergebnisse sind für ca. 3 Uhr angedacht, die Räumlichkeiten bis Samstagfrüh offen.

Zur Verpflegung gibt es ein kostenfreies Grillbuffet*:

  • Kräftiger Kesselgulasch aus dem Farmertopf
  • Frisch vom Grill mit verschiedenen Dips
    • Thüringer Rostbratwürste
    • Schweinenackensteak
    • Gemüsespieß mit Knoblauchdip
    • Mini-Haxen in Chili-Ingwer-Beize
  • Hirtensalat mit Fetakäse
  • Herzhafter sächsischer Kartoffelsalat
  • Brot und Brötchenkorb

Anmeldung zum Windows-8-Hackathon

* geringfügige Änderungen vorbehalten, Getränke auch frei

Die “Zutaten” klingen nach einer richtig ordentlichen Coding-Session! Also schnell anmelden, die Plätze sind begrenzt!

Treffen der DNUG Braunschweig - Dynamics AX 2012- Ein ERP System (auch) für .NET Entwickler

02.05.2012 06:23:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 07.05.2012 um 19:00 im Restaurant Zucker (Tagungsraum). Dieses Mal kommt uns der Microsoft MVP Axel Kühn mit einem Vortrag über Dynamics AX besuchen.

Abstract:
Microsoft Dynamics AX 2012 ist eine umfassende, leistungsstarke Lösung für Enterprise Resource Planning (ERP). Dynamics AX 2012 ist hoch anpassbar und bietet hierdurch die Möglichkeit auf sich verändernde Anforderungen an eine ERP-Lösung schnell reagieren zu können. Hierbei integriert sich Dynamics AX vollständig in die Microsoft-Plattform, was den Vorteil mit sich bringt, dass für Anpassungen oder Erweiterungen des Systems auch .NET Know-How verwendet werden kann.
Der Vortrag gibt einen Überblick über die technischen Möglichkeiten zur Systemanpassung und Integration in die .NET Welt. Anhand von kurzen Beispielen wird aufgezeigt, wie praxisnahe Problemstellungen mit .NET umgesetzt werden können. Weiterhin bietet der Vortrag einen ersten Überblick über die Architektur von Dynamics AX 2012 und welche Chancen und Möglichkeiten sich für .NET Entwickler ergeben.

Biographie:
Axel Kühn (http://blog.ak-home.net) arbeitet als Team Lead Development bei der impuls Informationsmanagement GmbH (http://www.impuls-solutions.com) mit Standorten in Nürnberg, Stuttgart und Braunschweig.

Seit vielen Jahren implementiert er erfolgreich ERP-Anwendungen mit Dynamics AX und dem Microsoft Stack. Seine langjährige Erfahrung als Developer, Technical- sowie Solution-Architekt in unterschiedlichsten Projekten mit bis zu mehreren tausend Usern steht als Garant für praxisorientierte und zuverlässige ERP-Lösungen auf Basis von Dynamics AX und anderen Microsoft Technologien wie .NET.

Als langjähriger MVP für Dynamics AX, Moderator von MSDynamics.de, Speaker und aktives Mitglied der Community stellt er sein Fachwissen tagtäglich anderen Mitgliedern der Dynamics AX Community zur Verfügung.

Wie immer ist die Veranstaltung kostenlos! Weitere Informationen zur DNUG Braunschweig können hier gefunden werden: http://www.dotnet-braunschweig.de

dotnet Cologne–Ich bin dabei

02.05.2012 06:19:00 | Lars Keller

Am kommenden Freitag (04.05.2012) findet die dotnet Cologne statt. Ich bin dieses Mal dabei und werde einen Vortrag zur “Kinect & MS Office Entwicklung” halten.

Die Agenda der dotnet Cologne ist prall gefüllt: SQL Server 2012, VS 11, PowerShell und natürlich viel Windows 8.

Wir sehen uns dort!

Regeln | Impressum