zurück zum Artikel

Visual Studio LightSwitch unter der Lupe

Dr. Holger Schwichtenberg

Visual Studio ist dafür bekannt, eine breite Palette von Entwicklungsaufgaben zu unterstützen. Den bisherigen Schwachpunkt RAD soll nun "LightSwitch" beheben.

Microsofts Visual Studio ist dafür bekannt, eine breite Palette von Entwicklungsaufgaben zu unterstützen. Den bisherigen Schwachpunkt Rapid Application Development (RAD) soll nun "LightSwitch" beheben. heise Developer unterzog die Beta-1-Version des neuen Visual-Studio-Sprösslings einem ersten Test.

Hersteller von Entwicklungsumgebungen heben heutzutage gerne Funktionen in ihren Produkten hervor, die sich an "Enterprise" und "Cloud" richten. Aber die immer noch überwiegende Zahl der entwickelten Anwendungen ist viel kleiner und lokaler. Sie haben den Sinn, Daten aus der Datenbank anzuzeigen, Suchen zu erlauben oder Datensätze zu ändern, zu ergänzen und zu löschen. Man spricht hier von "datengetriebenen Anwendungen", "Datenbankanwendungen" oder "Forms-over-Data". Solche Anwendungen entstehen nicht immer aus der Hand von professionellen Entwicklern; auch versierte Kräfte in den Fachabteilungen bauen sie sich für den Abteilungsbedarf.

Microsoft hatte eine gute Tradition bei Produkten, die dieses Anwendungsgebiet und diese Zielgruppe ansprechen. Visual Basic 6.0 ist dafür gut geeignet, und noch schneller geht es mit Microsofts Access. In der .NET-Arä fehlt es aber bisher an vergleichbaren Produktivwerkzeugen. Mit Visual Studio 2005 führte Microsoft ein, dass sich einfache Dateneingabeformulare per Drag & Drop aus dem Datenbankfenster heraus generieren ließen. Entwickler, die Windows Presentation Foundation (WPF) statt Windows Forms einsetzen, mussten auf Ähnliches bis Visual Studio 2010 warten und bekommen auch damit noch nicht den gleichen Funktionsumfang wie für Windows Forms.

Weder RAD für WPF noch das für Windows Forms sind aber vergleichbar mit dem, was Access bietet. Neben der Drag & Drop-Option bietet es Assistenten für den Grundaufbau eines Fensters und für einzelne Steuerelemente. Formulare lassen sich verschachteln und auf einfache Weise verbinden. Der Datenzugriff lässt sich direkt aus dem Formular heraus konfigurieren, und für die Gestaltung der Oberfläche gibt es viele (aber nicht zu viele) Optionen.

Access soll hier freilich nicht glorifiziert werden: Eine Schichtentrennung im Sinne eines mehrschichtigen Komponentenansatzes gibt es bei der Form des RAD nicht. Auch echte Objektorientierung, Webservices und andere etablierte Techniken sind mit Access und VBA nicht oder nur mit erhöhtem Aufwand zu realisieren. Access-Anwendungen haben (auch bei Zugriff auf Microsofts SQL Server) eine begrenzte Skalierbarkeit. Dennoch ist für viele Anwendungen Access hinreichend, und man findet sie daher heute noch tausendfach in Unternehmen aller Größe. Wer das nicht glaubt, sollte die Access-Entwickler-Konferenz [1] besuchen.

Mit dem neuen Visual-Studio-Sprössling "LightSwitch" will Microsoft nun die bei VB6 und Access Gebliebenen abholen und in die "neue" .NET-Welt führen. Das Projekt läuft bei Microsoft seit einigen Jahren unter dem Codenamen "KittyHawk". Anders als heute oft in Redmond gelebt, war das Projekt nur wenigen eingeweihten MVPs [2] bekannt, und selbst der Codename stand unter strengen Non-Disclosure Agreements (NDA). Erstmals im November 2008 [3] war Microsoft zu entlocken, dass mit Visual Studio 2010 ein RAD-Werkzeug erscheinen soll. Aus dem Termin wurde nichts. LightSwitch liegt nun im August 2010 als eine Beta-1-Version vor und soll irgendwann im Jahr 2011 erscheinen.

Schon die Größe des Installationspakets (518 MByte) ist ein Indiz dafür, dass LightSwitch kein Add-on, sondern eine Visual Studio 2010 Shell inklusive .NET Framework 4.0 installiert. Während des Set-ups blitzen noch Namen wie "Silverlight", "MSDeploy" und "RIA Services" und "SQL Server Express" auf, die aufzeigen, wohin die Reise geht. Von der Versionsnummer her (4.0.30319 beziehungsweise 10.0.30319.1) handelt es sich um die gleichen Versionen von .NET und Visual Studio, die Microsoft im April 2010 ausgeliefert hat. Daher kann man LightSwitch auch als Erweiterung zu einem bestehenden Visual Studio 2010 installieren. Die Erfahrungen der letzten Jahre zeigen, dass man dennoch die Beta 1 besser auf einem getrennten (gegebenenfalls virtuellen) System einrichten sollte.

Vor den ersten Gehversuchen sollte man verstehen, dass LightSwitch kein Assistent mit Codegenerator für Silverlight-Anwendungen ist, sondern ein komplettes Framework, das über das Browser-Plug-in hinausgeht. Daher kann man den generierten Programmcode nicht als normales Silverlight-Projekt weiterverwenden. Das hat bereits zu Diskussionen im LightSwitch-Webforum [4] und dem Änderungsvorschlag auf Microsoft Connect [5] geführt, die LightSwitch-Codegenerierung mit T4-Vorlagen anzupassen.

Nach dem LightSwitch-Begrüßungsfenster sieht man beim Start zunächst eine vertraute Visual-Studio-2010-Oberfläche. Dass man in einer anderen Welt ist, zeigt sich aber beim Anlegen eines neuen Projekts: Statt der Qual der Wahl zwischen Dutzenden Vorlagen steht der Anwender nur vor der Entscheidung C# oder Visual Basic (siehe Abbildung 1).

Projektauswahl zwischen einer C#- und einer Visual-Basic-Anwendung (Abb. 1)

Positiv fällt die Option "Add to Source Control" auf. LightSwitch unterstützt Versionsverwaltung von Hause aus mit dem Team Foundation Server (TFS). Ein Dialog zur Auswahl anderer Quellcodeprovider ist in den Optionen vorhanden.

Nach dem Anlegen eines Projekts sieht man im Solution Explorer drei leere Ordner (Properties, Data Sources und Screens), und in der Bildschirmmitte hat der Anwender die Wahl, eine neue Datenbank anzulegen oder eine bestehende zu verwenden (siehe Abbildung 2).

Ein leeres LightSwitch-Projekt (Abb. 2)

Wer sich das angeblich leere Projekt auf der Festplatte ansieht, erkennt den Charakter von LightSwitch: Es sind fünf Visual-Studio-Quellcodeprojekte und diverse BIN-Ordner sowie eine leere Datenbank (ApplicationDatabase.mdf) entstanden – insgesamt 618 Dateien in der Größe von 68,5 MByte. Wenn man nun schon auf "Starten" klickt, sieht man ein Fenster mit einer leeren Menüleiste links und leerem Inhaltsbereich. Ein Blick in das Kontextmenü verrät: Es handelt sich um eine Silverlight-Anwendung, die man in dem Fall außerhalb des Browser gestartet hat.

Unter "Attach to external database" findet man als Quellen neben dem SQL Server (einschließlich SQL Server Express und SQL Azure) als Optionen SharePoint und einen WCF-RIA-Service, sodass auch eine Anbindung an bestehende Anwendungen möglich ist. Für eine SQL-Server-Datenbank bietet die IDE die Auswahl von Tabellen und Sichten an, nicht aber Stored Procedures. Am Ende des Assistenten zeigt die Entwicklungsumgebung die ausgewählten Tabellen im Solution Explorer unter Data Sources an.

Die Namen mögen auf den ersten Blick verwundern: LightSwitch hat an die Tabellennamen ein "s" angehängt, aus "Flug" wurde "Flugs", aus "Mitarbeiter" wurde "Mitarbeiters" und aus "Person" wurde "People". Eingeweihte wissen, dass dabei der Pluralisierungsdienst des ADO.NET Entity Framework 4.0 am Werke war. Während in der vollständigen Version von Visual Studio der Entity-Framework-Assistent die Pluralisierung als Option anbietet, ist sie in der Beta 1 von LightSwitch immer aktiv und eine Option zum Abschalten auch nach intensiver Suche nicht auffindbar. Immerhin kann man nachträglich im Designer die unschönen Pluralbildungen manuell ändern. Man kann dabei Singular und Plural gleich benennen; die Pluralbildung macht nur den Code etwas übersichtlicher. Der Autor des Beitrags empfiehlt, dass prägnante Wort "Set" (oder deutsch: "Menge") anzuhängen, aus "Person" wird so "PersonSet" beziehungsweise "PersonMenge".

Die Designer-Ansicht der erzeugten Entitäten ist anders als im großen Bruder: Anstelle einer endlosen Zeichenfläche mit Zoom sieht man immer nur eine Entität mit ihren direkten Beziehungen. Die Liste der Einstellungen für jede Spalte ist einerseits einfacher gehalten als im Entity-Framework-Designer in Visual Studio 2010 (beispielsweise ist statt "Allow Nulls" die Frage hier "Required"), zum anderen gibt es aber die Option, Einfluss auf die Benutzeroberfläche nach einem modellgetriebenen Ansatz zu nehmen. Zu jedem Feld lässt sich festlegen, ob es auf dem Bildschirm erscheinen und wie es dort heißen soll (Display-Name) beziehungsweise ob es durchsuchbar ist. Bei Zeichenketten kann man eine Maximallänge vorgeben und bei Datum- und Zahlfeldern einen Wertebereich. Über "Choice List" lassen sich direkt mögliche Werte definieren. Pro Entität darf man außerdem einen "Default Screen" einstellen, was aber noch keinen Sinn ergibt, solange man keine Bildschirme erstellt hat.

Einbinden einer bestehenden Datenbank (Abb. 3)

Berührung mit einem Code-Editor erhält man durch einen Klick auf "Custom Validation". Es erscheint der bekannte Visual-Studio-Editor (mit allen zentralen Funktionen wie IntelliSense, Refactoring, Code-Schnippseln und Haltepunkten), um eine beliebige Validierungslogik zu hinterlegen. Ein Beispiel in C# wäre:

partial void Geburtstag_Validate(EntityValidationResultsBuilder 
results)
{
if (this.Geburtstag.HasValue && ((DateTime.Now<this.Geburtstag.Value))
results.AddPropertyError("Geburtstag kann nicht in der Zukunft liegen!");
}

Die zu verwendende Sprache (C# oder Visual Basic) hängt von der Projektauswahl zu Beginn ab.

Eine Tabelle hinzufügen darf man der bestehenden Datenbank im Solution Explorer nicht. Die Option "Add Table" ist ausgegraut. Hierfür muss man derzeit auf den aus dem großen Visual Studio bekannten Server Explorer (beziehungsweise Database Explorer in den Express-Editionen) zurückgreifen und dort die Tabelle direkt im SQL Server anlegen. Anschließend kann man die Tabelle über "Refresh Datasource" in LightSwitch einbinden.

Die Funktion "Add Table" gibt es zwar über den Ast "Data Source" im Solution Explorer, hierdurch entsteht aber eine Tabelle in der erwähnten Datenbank ApplicationDatabase.mdf. Als Datentypen hat man die .NET- anstelle der SQL-Server-Datentypen zur Auswahl. Darüber hinaus gibt es mit "EmailAddress" und "PhoneNumber" noch zwei Spezialisierungen von "String" mit automatischer Validierung sowie "Money" als Spezialisierung von "Decimal".

Auch der Dialog zum Anlegen von Beziehungen (Schaltfläche "Relationship" oder Kontextmenü "Add Relationship") erinnert an Access. Zusätzlich zur Angabe der Kardinalitäten in formaler Schreibweise zeigt die Entwicklungsumgebung eine Erläuterung in Textform. Überraschenderweise kann man zudem datenbankübergreifende Beziehungen anlegen (siehe Abbildung 4). Sie bildet LightSwitch aber nicht in der Datenbank, sondern rein auf Anwendungsebene ab.

Erstellen einer neuen Tabelle mit Beziehungen - auch zu anderen Datenbanken (Abb. 4)

"Add Query" erlaubt, innerhalb des Solution Explorer im Kontextmenü einer Entität eine Abfrage mit Filter, Sortierung und Gruppierung zu gestalten. Leider gibt es ebenso wie bei den Entitäten auch bei den Abfragen keine Vorschau auf die Daten. Auch ein Join über mehrere Entitäten ist noch nicht im Abfragedesigner umzusetzen. Dafür bleibt die Option, direkt in der Datenbank Sichten zu definieren und diese in LightSwitch einzubinden. Es besteht also noch Vereinfachungspotenzial. Sofern die Abfrage zwar einen Join enthält, aber wieder nur Datensätze des Abfragetyps liefert, kann man in dem Ereignis PreprocessQuery (zu finden über die Schaltfläche "Write Code", siehe Abbildung 5) eine komplexere Abfrage per Code definieren.

Abfrage definieren (Abb. 5)

Der zweite Hauptast neben "Data Sources" im Solution Explorer ist "Screens". Der "Add New Screen"-Dialog bietet fünf Vorlagen (siehe Abbildung 6) und die Auswahl der Datenmenge(eine Menge von Entitäten oder eine Abfrage), die die Grundlage für den Bildschirm bilden soll.

Vorlagen für die Bildschirmaufteilung (Abb. 6)

Einen schnellen Erfolg bringt die Vorlage "Editable Grid Screen". Nach der Auswahl der Datenquelle (in Abbildung 6 die Entitätsmenge "PersonSet") erscheint eine hierarchische Ansicht des Bildschirmaufbaus (siehe Abbildung 7), die man anpassen kann.

Bearbeiten der Bildschirmgestaltung (Abb. 7)

Doch vor der ersten Anpassung sichert man sich ein Erfolgserlebnis durch einen Druck auf "F5" ("Start Debugging"). Es erscheint der Bildschirm "Personenliste" im Menü, der eine komplette Tabellenansicht der Personen mit Blättern, Filtern, Sortieren, Ändern, Hinzufügen und Löschen bietet. Beim Nachladen von Daten zeigt die Anwendung die aktuellen Datensätzen unscharf, und ein rotierender Kreis deutet dem Nutzer an, dass er warten muss. Warten muss der Nutzer bei der Beta 1 noch häufig, LightSwitch-Anwendungen zeigen sich nicht sehr performant. "Export to Excel" präsentiert die Datensätze in Excel, sofern es auf dem lokalen System installiert ist.

Die Personenpflegetabelle zur Laufzeit (Abb. 8)

Für das Ändern und Hinzufügen von Datensätzen würde man sich eine Detailansicht wünschen. Es bieten sich zwei weitere Bildschirme für "PersonSet" auf Basis der Vorlagen "New Data Screen" und "Details Screen" an. Der Bildschirm "NeuePerson" erscheint nach dem Anlegen auch im Baum. Fett geschriebene Bezeichnungen zeigen die Pflichtfelder an, rote Markierungen geben leer gelassene Pflichtfelder oder Verstöße gegen die in der Datenquelle hinterlegten Einschränkungen und den Überprüfungscode in der Validate()-Methode aus. Nach dem Speichern des neuen Eintrags wechselt die Ansicht automatisch zu "PersonenDetails". Dieses Umschaltverhalten ist in zwei Zeilen Code in NeuePerson_Saved() hinterlegt und dort änderbar.

Eingabe neuer Personen (Abb. 9)

"PersonenDetails" basiert auf der Vorlage "Details Screen". In dem Assistenten kann man nachlesen, dass sich die Bildschirme nicht direkt auf dem Hauptmenü aufrufen lassen, da die Grundlage hierfür eine parametrisierte Abfrage ist. Den Aufruf this.Application.ShowPersonenDetails(PersonenID) mit der Übergabe einer PersonenID könnte man zum Beispiel in die Personenliste (Abbildung 8) als zusätzlich Aktion "Detailansicht" einfügen. Der nach dem Erstellen des Button-Steuerelements im Screendesigner erforderliche Code sähe dazu wie folgt aus:

partial void Detailansicht_Execute()
{
if (this.PersonCollection.SelectedItem != null)
this.Application.ShowPersonenDetails(this.PersonCollection.
SelectedItem.PersonID);

}

Die neue Schaltfläche lässt sich wahlweise in die Befehlsleiste oberhalb der Tabelle oder in die Tabelle platzieren. Eine einzelne Zelle kann mehrere Button- und Link-Objekte besitzen.

Der Bildschirm-Designer bietet einige Anpassungsoptionen. Die Leiste auf der linken Seite zeigt die verfügbaren Aktionen. Die oberste ist die Abfrage selbst, für die man Eigenschaften wie die Seitengröße einstellen kann. Für die Aktionen "Close" und "Save" kann der Entwickler Programmcode hinterlegen, der bei Beginn und nach Ende der Aktion ausgeführt werden soll. Bei den Beginn-Ereignissen ist ein Abbruch möglich. Abbildung 10 zeigt mit "ExportHTML" eine vom Entwickler selbst definierte Aktion (mit "Add Button" in dem Ast "Command Bar").

Festlegen der Abfrageeigenschaften im Screendesigner (Abb. 10)

Für solche Schaltflächen gibt es zwei implementierbare Methoden: CanExecute() liefert zurück, ob die Aktion aktuell umsetzbar ist. Execute() führt die Aktion aus. Eine Implementierung für eine Export-Funktion zeigt das folgende Listing. Zu beachten ist, dass eine LightSwitch- genau wie eine Silverlight-Anwendung außerhalb des Browsers nicht auf alle Pfade zugreifen darf.

/// <summary>
/// Aktion "Export HTML"
/// </summary>
partial void ExportHTML_Execute()
{
string DateiName = System.IO.Path.Combine(Environment.GetFolderPath
(Environment.SpecialFolder.MyDocuments), "export.htm");
System.IO.StreamWriter sw = new StreamWriter(DateiName, true);
sw.WriteLine("<html><body><table>");
foreach (var p in this.PersonCollection)
{
sw.WriteLine("<tr><td>" + p.PersonID + "</td><td>"
+ p.Name + "</td><td>" + p.Geburtstag + "<7td></tr>");
}
sw.WriteLine("</table></body></html>");
sw.Close();

this.ShowMessageBox("Liste exportiert nach " + DateiName);
}

Bei allen Ausgaben in den selbst definierten Aktionen ist Vorsicht geboten, denn sie werden asynchron gestartet. Schon ein einfaches Dialogfeld läuft auf "Invalid cross-thread access", wenn man es nicht korrekt mit dem UI-Thread synchronisiert. Ein direkter Zugang zu den Steuerelementen der Benutzeroberfläche über die Methode FindControl() erfordert immer eine Synchronisierung der Threads. Für einfache Standarddialoge bietet die Basisklasse Microsoft.LightSwitch.Framework.Client.ScreenObject, von der alle Bildschirme abgeleitet sind, die Methoden ShowMessageBox() und ShowInputBox().

Auch die angezeigten Felder sind anpassbar. Zum einen kann man die Reihenfolge der Elemente per Drag[]& Drop verschieben. Zum anderen lässt sich das zur Darstellung verwendete Steuerelement auswählen. Als Drittes kann man neben dem Attribut der angezeigten Entität sogenannte lokale Attribute anlegen; sie sind dann per Programmcode zu befüllen, etwa in den Ereignissen Loaded() oder Saved(). Zum Beispiel könnte man ein weiteres Feld "Alter" definieren, dass anhand des Geburtsdatums zusätzlich das Alter einer Person anzeigt. In der Liste der verfügbaren Ereignisse vermisst man im ersten Moment eines, das ausgelöst wird, wenn sich der Inhalt eines Eingabefeldes ändert. Hier muss man etwas umdenken: Im obigen Fall würde man "Alter" als berechnetes Feld in der Entität anlegen und darauf in den Bildschirm aufnehmen. Bei jeder Änderung am Geburtstag erfolgt so automatisch die Neuberechnung von Alter. Alternativ gibt es auf der Ebene der Entität für jedes Attribut ein "Changed"-Ereignis.

Die Anpassung eines Bildschirms ist normalerweise mit vielen Wechseln zwischen Designer und laufendem Programm verbunden. Um das zu vermeiden, kann man während des Debuggings einen Bildschirm im laufenden Betrieb anpassen. Dazu dient die Schaltfläche "Customize Screen", die bei dem Vorgang oben rechts in der Ecke erscheint. Ein Klick darauf öffnet den "Customization Mode", in dem sich die Reihenfolge, die Steuerelemente und die Steuerelementeigenschaften beeinflussen lassen. Die Vorschau zeigt den aktuellen Stand. Alle hier vorgenommenen Änderungen sind sofort nach Beenden des Dialogs in der Anwendung sichtbar und bleiben auch nach dem Ende des Debuggings erhalten.

Anpassungen des Bildschirms während des Debuggings (Abb. 11)

Vergeblich sucht man in der Bildschirmkonfiguration nach Einstellungen wie Farbe, Schriftart und Schriftgröße. Alle gestalterischen Eigenschaften steuert LightSwitch zentral über das in den Projekteigenschaften ausgewählte "Theme". Derzeit liefert Microsoft nur eines mit ("LightSwitch Blue Theme"). In Zukunft soll man weitere Layoutvorhaben über den aus Visual Studio 2010 bekannten Extension Manager aus dem Internet nachladen können. Codezentriert kann man aber die einzelnen Gestaltungsattribute der Steuerelemente weiterhin annavigieren, wenn auch etwas komplizierter, als man es bisher kennt, was man als eine Richtungsweisung verstehen sollte.

Einfluss über den Standort eines Bildschirms in der Menüstruktur der Anwendung hat der Entwickler ebenfalls in den Projekteigenschaften, und zwar in der Registerkarte "Screen Navigation". Die Navigationsstruktur ist technisch auf eine Ebene begrenzt, das heißt, eine beliebig tiefe Baumstruktur ist nicht möglich.

Ein direkter Zugriff auf den XAML-Code des Bildschirms ist in LightSwitch nicht vorgesehen. Entwickler können in Visual Studio 2010 selbst Silverlight-Steuerelemente entwickeln, die ebenfalls in LightSwitch verwendbar sind oder sogar einen ganzen Bildschirm ersetzen. Eine Dokumentation dazu ist aber aktuell noch nicht verfügbar, allerdings zeigen ein Video auf Channel 9 [6] und ein Blog-Eintrag [7] die Grundzüge.

Eine geeignete Vorlage für die Darstellung verbundener Entitäten ist "List and Details", wobei "PassagierSet" als "Screen Data" und "FlugPassagierSet" als "Additional Data to include" zu wählen sind. Das Ergebnis (siehe Abbildung 12) ist noch nicht optimal, denn es zeigt als Repräsentation für den Flug immer nur den Abflugort an und die Passagiere kann man nur über die PersonenID zuordnen.

Master-Detail-Ansicht (Abb. 12)

Um die Anzeige der Flüge zu ändern, erstellt man in den "Data Sources" in der Entität "Flug" ein neues Attribut "FlugSummary" vom Typ "String". Für das Attribut ist automatisch vorgegeben, dass sich "Required" nicht aktivieren lässt und "IsComputed" gesetzt ist. Nach dem Klick auf "Edit Method" vervollständigt man den erscheinenden Methodenrumpf wie folgt:

partial void FlugSummary_Compute(ref string result)
{
result = this.Abflugort + " -> " + this.Zielort +
" (Flug #" + this.FlugNr + ")";
}

Dann legt man in den Eigenschaften der Entität "Flug" noch fest, dass "FlugSummary" nun "Summary Properties" ist (Abbildung 13). Fortan zeigt die Anwendung für Flüge immer die hinterlegte Kombination aus Abflugort, Zielort und Flugnummer an.

Erstellen eines berechneten Attributs als "Summary Property" (Abb. 13)

Die LightSwitch-Oberfläche ist immer eine Silverlight-Anwendung, der Entwickler hat jedoch Einfluss darauf, ob die Anwendung direkt auf dem Desktop (mit vollständigem .NET Framework) oder im Browser (als Silverlight-Plug-in) läuft und wie sie die Daten bezieht. Standard ist der Modus "Desktop client, 2-tier Deployment". Das bedeutet, dass Silverlight direkt auf die Datenbank zugreift. Im Modus "Desktop client, 3-tier Deployment" laufen alle Datenbankzugriffe über Webservices auf einem Internet Information Server (IIS). Weiterhin ist ein Hosting in Microsofts Cloud-Dienst "Windows Azure" möglich.

Im dritten Modus "Browser client, 3-tier Deployment" ist der Zugriff über Webservices die einzige Wahl. Zur Entwicklungszeit wird ein IIS nicht benötigt. LightSwitch verfügt genau wie das große Visual Studio über einen integrierten lokalen Webserver, der hier "LightSwitch Server" heißt und sich als Benachrichtigungssymbol in der Taskleiste bemerkbar macht, wenn man das Debugging startet. Beim Start im Browser läuft die LightSwitch-Anwendung in einer Sandbox; Dateisystemzugriffe und Excel-Export sind dann verboten. Die erste Version von LightSwitch wird noch nicht auf Windows Phone 7 laufen.

Über einen "Publishing Wizard" (Menü "Build/Publish") erzeugt man ein Installationspaket für die Verbreitung der Anwendung. Im Fall des "2-tier Deployment" entsteht eine setup.exe, die gegebenenfalls vorher das .NET Framework 4.0 und die zusätzlichen LightSwitch-Komponenten (optional auch einen SQL Server Express) von einem Microsoft- oder einem eigenen Server lädt und installiert. Für das "3-tier Deployment" entsteht hingegen ein MSDeploy-Paket für den IIS. Die SQL-Skripte zur Einrichtung der Datenbank sind in den Installationspaketen enthalten.

LightSwitch bietet noch weitere Funktionen, vondenen einige kurz erwähnt sein sollen:

Was sicherlich in LightSwitch bisher fehlt und zudem nicht mehr für die erste Version geplant ist, sind Berichte. Das ist natürlich eine wesentliche Einschränkung. Microsoft rechnet [9] aber damit, dass Drittanbieter diese schmerzliche Lücke füllen werden. Ein Blog-Eintrag [10] zeigt, wie man aus LightSwitch heraus den Inhalt von Bildschirmen und Steuerelementen mit derKlasse PrintDocument drucken kann. Auch die spezielle Unterstützung für Caching im Offline-Zustand fehlt noch.

LightSwitch ist eine schon lange überfällige Ergänzung der .NET-Plattform. Es stellt eine radikale Vereinfachung für weniger erfahrene Programmierer und Gelegenheitsentwickler dar. Auch entlastet es von lästigen Infrastrukturaufgaben bei Datenbankzugriffen, ORM-Mapping, Mehrschichtentwicklung und Verteilung. Eine Vereinfachung hatte Microsoft bereits mit den Express-Editionen angestrebt, die dort aber nicht erreicht. Für Profi-Entwickler stellt LightSwitch eine Alternative für das Rapid Application Development von datengetriebenen Eingabeformularen und Datentabellen dar. .NET-erfahrene Entwickler können auf Basis ihres Wissens auch komplexere Anpassungen vornehmen.

Die kompilierten Anwendungen sind noch recht träge, und die Entwicklungsumgebung stürzt manchmal ab, aber die erste Beta 1 ist noch kein Maßstab. Microsoft ist auf einem guten Weg, eine lange vernachlässigte Strömung in der Softwareentwicklung endlich in .NET zu integrieren.

Trotz der modellgetriebenen Abstraktion und der Automatismen gibt es viele Eingriffsmöglichkeiten in LightSwitch selbst. Die entbrannten Diskussionen über die Wiederverwendbarkeit und Anpassbarkeit des generierten Codes zeigen, dass LightSwitch als Produktivwerkzeug begeistern kann, die Anwender aber schon weiter denken als Microsoft selbst. Sicherlich werden die Redmonder in der ersten Version von LightSwitch nicht mehr auf die Forderungen aus dem Webforum eingehen können, aber langfristig darf man auf noch mehr Flexibilität hoffen. Möge Microsoft nur die bisher in LightSwitch gezeigte hohe Produktivität nicht opfern.

Holger Schwichtenberg
bietet mit seinem Unternehmen www.IT-Visions.de [11] Beratung und Schulungen im .NET-Umfeld. Er hält Vorträge auf Fachkonferenzen und ist Autor zahlreicher Fachbücher.

(ane [22])


URL dieses Artikels:
https://www.heise.de/-1066115

Links in diesem Artikel:
[1] http://www.donkarl.com/aek/
[2] http://www.it-visions.de/glossar/alle/4301/Most%20Valuable%20Professional.aspx
[3] https://www.heise.de/news/Microsoft-will-Rapid-Application-Development-mit-Net-verbessern-187516.html
[4] http://social.msdn.microsoft.com/Forums/en-US/lightswitchgeneral/thread/5c4b5112-ff6e-4708-92db-1c86b357b498
[5] https://connect.microsoft.com/VisualStudio/feedback/details/587810/should-lightswitch-be-able-to-generate-application-code-via-t4-not-just-applications?wa=wsignin1.0
[6] http://channel9.msdn.com/posts/funkyonex/Visual-Studio-LightSwitch-Beyond-the-Basics/
[7] http://lightswitch.adefwebserver.com/Blog/tabid/61/EntryId/2/Creating-A-LightSwitch-Custom-Silverlight-Control.aspx
[8] http://social.msdn.microsoft.com/Forums/en-US/lightswitchgeneral/thread/90b1f8e9-25ab-4d64-a16f-e64efc191eeb
[9] http://social.msdn.microsoft.com/Forums/en-US/lightswitchgeneral/thread/2bb2cfbc-17db-4e75-a531-ceee97ee0f51
[10] http://lightswitch.adefwebserver.com/Blog/tabid/61/EntryId/3/Printing-With-LightSwitch.aspx
[11] http://www.it-visions.de/start.aspx
[12] http://msdn.microsoft.com/en-us/library/ff851953.aspx
[13] http://msdn.microsoft.com/de-de/lightswitch/default%28en-us%29.aspx
[14] http://channel9.msdn.com/posts/Dan/Jay-Schmelzer-Introducing-Visual-Studio-LightSwitch/
[15] http://channel9.msdn.com/posts/funkyonex/Visual-Studio-LightSwitch-Beyond-the-Basics/
[16] http://blogs.msdn.com/b/lightswitch/
[17] http://social.msdn.microsoft.com/Forums/en-US/lightswitchgeneral
[18] http://blogs.infragistics.com/blogs/matthew_van_horn/archive/2010/08/05/lightswitch-technical-breakdown.aspx
[19] http://blogs.msdn.com/b/lightswitch/archive/2010/08/06/the-anatomy-of-a-lightswitch-application-overview.aspx
[20] http://blogs.msdn.com/b/lightswitch/archive/2010/08/09/the-anatomy-of-a-lightswitch-application-series-part-2-the-presentation-tier.aspx
[21] http://www.world-wide-wings.de
[22] mailto:ane@heise.de