Buch: C# 6 mit Visual Studio 2015 – das umfassende Handbuch von Andreas Kühnel

Buchcover: C# 6 mit Visual Studio 2015 - Andreas Kühnel

Wer nicht vor dem riesigen Umfang dieses Buches von fast 1.500 Seiten zurückschreckt, der findet hier zunächst einmal alles, was er für den Einstieg oder Umstieg in die Softwareentwicklung mit C# unter Windows benötigt.

.NET Framework

Vor über 10 Jahren hat Microsoft das .NET Framework veröffentlicht und damit die Grundlage gelegt für moderne Softwareentwicklung mit grafischer Oberfläche unter Windows. Zunächst wurde die Benutzeroberfläche mit Windows Forms gestaltet und die wechselseitige Beeinflussung von Benutzereingaben und Programmausgaben direkt mit der Ansicht verknüpft. Seit der Version 3 wird mit der WPF zunehmend eine modernere Software-Entwicklungsmethode nach dem Entwurfsmuster MVVM (Model-View-Viewmodel) unterstützt. Mit der Version 4 und den folgenden Versionen wurden verschiedene asynchrone Verfahren integriert, um moderne Mehrkern-Prozessoren besser zu unterstützen und deren Leistung voll ausschöpfen zu können.
Grundsätzlich ist das .NET Framework so aufgebaut, dass es eine gemeinsame Architekturschicht gibt, die sogenannte CLI (Common language infrastructure), die es ermöglicht, denselben Code mit ganz unterschiedlichen Programmiersprache zu erstellen. Von Anfang an wurde dabei Visual Basic ebenso unterstützt wie die Sprache C#, um die es hier gehen soll, und zunehmend auch F#, eine funktionale Programmiersprache. Sowohl C# als auch F# sind im Hause Microsoft entwickelt worden und inzwischen als Standard oder als Open Source freigegeben worden. Mit .NET Core geht Microsoft seit kurzem den Weg, die Plattform als Open Source von Grund auf neu zu entwickeln und unterstützt dabei Projekte, die das Framework auch auf anderen Plattformen als Microsoft Windows veröffentlichen.

C#

Die Sprache C# wurde vom dänischen Compiler-Guru Anders Hejlsberg für Microsoft entwickelt. Aus der Feder dieses Mannes stammen auch die Entwicklungsumgebung Turbo-Pascal und die ersten Versionen von Delphi, nach seinem Wechsel zu Microsoft Visual Basic for Applications (VBA), C# und zuletzt Typescript, eine voll typisierte JavaScript Erweiterung, ebenfalls beeinflusste er stark die Weiterentwicklung des .NET Frameworks. C# ist stark an die Notation von C und C++ angelehnt und greift Elemente von Java, Delphi und Haskell auf.

Das Buch startet zunächst mit den Grundlagen der Sprache C#, die in den ersten Kapiteln auf der Kommandozeile ohne grafische Oberfläche eingesetzt werden. Zu jedem Kapitel gibt es umfassende Code-Beispiele und Erläuterungen, die teilweise auch mit Screenshots dargestellt werden. Der Aufbau dabei ist strikt logisch und auch wenn in der Einleitung gesagt wird, dass die Reihenfolge der Kapitel nicht zwingend sei, so wird doch in jedem Kapitel das Wissen über die vorherigen Themen vorausgesetzt.

Nach einer Einführung in die Sprache und in die objektorientierte Programmierung allgemein werden darauf aufbauend der Umgang mit komplexen Daten, mit Dateien und mit der Multitasking-Umgebung nebenläufiger Prozesse dargelegt.

Grafische Benutzeroberfläche

Erst zur Mitte des Buches wird dann die Programmierung mit grafischer Oberfläche under der Windows Presentation Foundation (WPF) eingeführt und die Gestaltung der Oberfläche mittels der Objektbeschreibungssprache XAML (Extensible Application Markup Language) beschrieben. Mit der Erweiterung der Kenntnisse um abhängige Eigenschaften, Ereignisse und die Datenbindung unter XAML werden die Grundlagen für den nächsten wichtigen Abschnitt gelegt.

Model-View-Viewmodel

Seit dem .NET Framework 3.0 propagiert Microsoft die Entwicklung grafischer Software nach dem Entwurfsmuster MVVM, das eine Weiterentwicklung von MVP (Model-View-Presenter) ist und die Geschäftslogik von der Präsentation der Daten und diese wiederum von der Anzeige der grafischen Oberfläche trennt. Im Gegensatz zu MVC (Model-View-Controller), das als zustandsfreies Muster vor allem in der Web-Entwicklung angewandt wird, hält das ViewModel nicht nur die Daten, die in der Oberfläche angezeigt werden sollen, sondern auch die Kommandos, die durch die Oberfläche ausgelöst werden (z.B. durch einen Mausklick auf eine Schaltfläche). Diese strikte Trennung der Funktionalität hat mehrere Vorteile, unter anderem können alle Module des Models und des ViewModels automatisiert getestet werden. Weiterhin ermöglicht es die Trennung zwischen Programmierern und Designern in einem Software-Entwicklungsteam. Und zuletzt ermöglicht es die Aufteilung der Arbeit auf mehrere Teams bei großen Projekten.

Datenbanken

Der letzte Teil des Buches widmet sich dem Umgang mit Datenbanken und Datenbank-Servern. Hier wird zuerst die „klassische“ .NET Methode ADO.NET erläutert, die schon sehr früh einzug ins .NET Framework erhielt. Im weiteren Kapitel wird die aktuelle Methode „Entity Framework“ (EF) erklärt, in der nicht mehr direkt SQL-Befehle an die Datenbank gesendet werden, sondern die Daten der Datenbank mit gekapselten Methoden wie LINQ und Lambda-Expressions zugegriffen werden. Beide Methoden werden grundlegend in der ersten Hälfte des Buches erklärt. Zuletzt wird noch die auf EF aufbauende DbContext API eingeführt. Mit diesen Methoden verringert man die Gefahr, Benutzereingaben ungeprüft an die Datenbank weiterzugeben und so eine typische Sicherheitslücke („SQL-Injection“) in sein Programm einzubauen.

Ende

Damit endet das Buch sehr abrupt, es gibt kein Nachwort, keinen Ausblick, keine Empfehlungen für die nächsten Schritte oder aufbauende Lektüre. Dabei ist das Thema trotz des riesigen Umfangs mit diesem Buch keineswegs abgeschlossen. Was fehlt? Nach meiner bisherigen Erfahrung fehlt das ganze Kapitel der Windows-Store-Apps: Windows 8 Store, Windows 8 Phone und natürlich UWP (Universal Windows Platform) der gemeinsamen Windows 10 Apps – kurz alles was man unter „Metro-Style“ zusammenfassen könnte. Was aus meiner Sicht ebenfalls fehlt sind jegliche Tools und Erweiterungen, die die Arbeit mit den angesprochenen Themen erleichtern würden. Insbesondere zum Thema MVVM hätte ich mir einen kurzen Ausflug zu den MVVM-Frameworks und hilfreichen Erweiterungen gewünscht. In meinem aktuellen Projekt setze ich Unity-Container und das Prism-Framework ein, beides Technologien, die vom Microsoft Pattern & Practices Team ins Leben gerufen wurden und inzwischen als Open Source freigegeben sind. Zuletzt gibt es noch ein paar Seiten Werbung des Verlages, auf denen genau die richtigen Bücher zur weiteren Lektüre angepriesen werden, jedoch ohne jeglichen Zusammenhang mit dem Buch und ohne Empfehlung des Autoren.

Fazit: Trotz der enormen Seitenzahl ist das Buch zu diesem Thema nicht vollständig. Es vermittelt gut den Einstieg und ist logisch und klar strukturiert aufgebaut. Die Beispiele sind gut verständlich und teilweise praxisrelevant. Die Kapitel des Buches bauen stark aufeinander auf, so dass die Reihenfolge der Bearbeitung je nach Vorwissen nicht beliebig ist. Das Buch ist für absolute Einsteiger nicht geeignet. Für mich als Wiedereinsteiger mit geringen Kenntnissen der objektorientierten Programmierung war es perfekt geeignet. Die strukturierte Einführung in die Sprache in der ersten Buchhälfte hat mich begeistert, in der zweiten Hälfte kommen manche Themen etwas zu kurz. Schade ist das fehlende Ende. Trotz der Mängel kann ich das Buch uneingeschränkt empfehlen, es wird mir weiterhin als Nachschlagewerk dienen.

Autor Kühnel, Andreas
Erschienen 2016 bei Rheinwerk Verlag GmbH, Bonn
Auflage 7., aktualisierte und erweiterte Auflage 2016
Format gebunden, 1482 Seiten
ISBN 987-3-8362-3714-7

Dieses Buch bei Amazon bestellen


Empfehlungen zur ergänzenden Lektüre

Da der Autor dies versäumt hat, kommen hier meine Empfehlungen. Alle Links zu Amazon enthalten eine Empfehlung von mir und beteiligen mich bei einer Bestellung geringfügig am Umsatz. Sofern nicht anders vermerkt, habe ich alle empfohlene Literatur selbst in Augenschein genommen, teils komplett gelesen.

Entwurfsmuster (u.a. Erklärung von MVVM und Abgrenzung zu den anderen Mustern)

Qualität und Professionalität

WPF, .NET und UWP


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.