Von der Datenbank bis zur Oberfläche mit .NET, Teil 1: Datenzugriff und Logik

Seite 3: Geschäftslogik & Test

Inhaltsverzeichnis

Für die Geschäftslogik legt man nun ein weiteres Projekt (WWWings_GL) an und setzt Verweise auf die Projekte WWWings_GO und WWWings_DZS sowie die .NET-Framework-Assemblies System.Data.Entity und System.Transactions.dll. Auf der Geschäftslogikebene sollen nun die Operationen nicht mehr gemäß der Entitäten, sondern anhand des Geschäftsprozesses zusammengefasst werden. Daher gibt es dort nur noch eine einzige Klasse BuchungsManager mit den sieben Methoden GetFlug(), GetFluege(), GetFlughaefen(), GetPassagier(), GetPassagiere(), SavePassagierSet() und CreateBuchung(). Sechs dieser Methoden leiten einfach an die entsprechenden Methoden in der Datenzugriffsschicht weiter. CreateBuchung() ist insofern anders, da hier zwei Manager der Datenzugriffsschicht zu verwenden sind, und es soll sichergestellt sein, dass die Platzanzahl im Flug nur reduziert wird, wenn die Zuordnung des Passagiers zum Flug auch möglich war (und umgekehrt).

Jede SaveChanges()-Ausführung ist automatisch eine Transaktion über alle, seit dem Laden beziehungsweise letzten Speichern der Änderungen in der EF-Kontextinstanz. In diesem Fall kommen aber zwei SaveChanges() in unterschiedlichen Kontexten zum Einsatz. Daher muss man eine explizite Transaktion definieren. In .NET ist das einfach mit der Klasse TransactionScope aus der Assembly System.Transactions.dll möglich. Alle innerhalb eines TransactionScope ausgeführten Datenbankoperationen bilden automatisch eine Transaktion – selbst wenn diese in verschiedenen Datenbanken und Datenbankmanagementsystemen stattfinden. Complete() markiert das Ende der Transaktion. Wird der TransactionScope vorher durch einen Laufzeitfehler verlassen, löst er automatisch ein Zurückrollen aus. Die komplette Geschäftslogik zeigt Listing 5.

Nun ist es an der Zeit, die Geschäftslogik mit einem ersten einfachen Client einer ersten Überprüfung zu unterziehen. Dafür bietet sich eine Konsolenanwendung an. Man muss in der Projektmappe ein weiteres neues Projekt vom Typ "Console Application" und Namen "WWWings_TestKonsole" anlegen. Das Projekt benötigt eine Referenz auf WWWings_GL und WWWings_GO sowie System.Data.Entity. Außerdem muss man die app.config-Datei aus dem Projekt WWWings_GO nach WWWings_TestKonsole kopieren, da der EF-Designer dort die bei der Startanwendung benötigte Verbindungszeichenfolge abgelegt hat.

Listing 6 zeigt den Testcode, der einen Flug abruft, einen neuen Passagier erzeugt, dessen ID ausgibt und anschließend eine Buchung durchführt. Die Flug-ID muss man entsprechend der selbst erfassten Testdaten anpassen. Nach dem erfolgreichen Kompilieren kann man die erzeugte Anwendung entweder direkt über WWWings_TestKonsole.exe im Dateisystem oder im Debugger in Visual Studio starten. Zum Debugging ist notwendig, dass man die WWWings_TestKonsole als Startanwendung festlegt, indem man in ihrem Kontextmenü "Set as Start Project" wählt. Dann wird dieses Projekt in der Projektmappe in fetter Schrift dargestellt.

Ausgabe der Testkonsole (Abb. 7)

Abbildung 7 zeigt beispielhaft das Ausführungsergebnis, wobei die ausgegebenen IDs abhängig sind von den selbst erfassten Testdaten. Das fertige Projekt zum Herunterladen enthält übrigens einen Testdatengenerator, damit der Leser seine Fingerkuppen schonen kann.

In kurzer Zeit ist eine, in mehrere wiederverwendbare logische Schichten aufgeteilte .NET-Anwendung entstanden mit einer aus einem Objektmodell generierten Datenbank, Datenzugriffsschicht, Geschäftslogik und einem Testclient. Der zweite Teil des Tutorials erweitert das Fallbeispiel zu einer verteilten Anwendungen mit "Middle Tier Services". In den weiteren Teilen entstehen dann grafische Benutzerschnittstellen (HTML mit ASP.NET, Silverlight und WPF), die auf diesen Diensten aufsetzen.

Dr. Holger Schwichtenberg
leitet das Expertenteam von www.IT-Visions.de, das Beratung, Schulungen und Support im Umfeld von .NET und Windows anbietet. Er hält Vorträge auf Fachkonferenzen und ist Autor zahlreicher Fachbücher.

  • Holger Schwichtenberg; .NET 4.0 Crashkurs; Microsoft Press 4. Aufl. 2010
  • Julia Lermann; Programming Entity Framework; O'Reilly 2. Aufl. 2010