Mittwoch, 19. Dezember 2007

Subsonic - ein kleiner Erfahrungsbericht (Teil 1)

Seit gut einem halben Jahr verwende ich nun hin und wieder SubSonic. Darauf gekommen bin ich eigentlich mehr durch Zufall über das PayPal-Starterkit (inzwischen dashCommerce), welches mit Hilfe von SubSonic umgesetzt wurde.
Inzwischen habe ich SubSonic "lieb gewonnen ;-)" und möchte in kuzer Form meinen Eindruck vermitteln.

Mich überzeugt vor allem die einfache Verwendung und Einbindung von Subsonic in Projekten.
Nach nur wenigen Handgriffen (Subsonic-DLL referenzieren, web.config anpassen) und schon kann SubSonic verwendet werden.
Interessant ist auch, das Subsonic inzwischen auch in Winforms-Anwendungen verwendet werden kann. Meine Erfahrungen mit Subsonic beschränken sich bisher allerdings auf
die Verwendung mit ASP.NET.

Es gibt zwei wesentliche Methoden Subsonic zu verwenden.

a) Codegenerierung durch Subsonic
b) Zugriff auf die Datenquelle über die Subsonic-Querytool

Mit Hilfe der Codegenerierung erzeugt Subsonic den Quellcode für die Datenzugriffsschicht.
Über die web.config kann dabei festgelegt werden auf welche Art und Weise der Quellcode generiert werden soll.
Das bedeutet, dass man z.B. definieren kann, welchem Namespace die erzeugten Klassen zugeordnet werden sollen.
Auch kann festgelegt werden, ob abhängige Tabellen als Properties generiert werden sollen, ob für Stores Procedures ebenfalls Code erzeugt werden soll und und und ...
Prinzipiell wird für eine Tabelle eine Klasse erzeugt, die alle Spalten als Eigenschaften implementiert, und natürlich auch Methoden zur Bearbeitung der Daten bietet (Speichern, Hinzufügen löschen ...)
Zudem wird eine Controller-Klasse erzeugt, die verschiedene Methoden bietet, über die Datensätze in Form einer typisierten Collection zurückgegeben werden können.
Die Methode FetchAll() z.B. gibt eine Collection aller Datensätze der betreffenden Tabelle zurück.
Der generierte Code kann natürlich über ein Templatesystem beeinflusst werden.

Die Code-Erzeugung kann dabei über ein Webinterface der Beispielanwendung (wird weiter unten noch erwähnt), die Sonic.exe bzw. direkt aus VisualStudio erfolgen.

Prinzipiell folgt Subsonic dem Designpattern "ActiveRecord", d.h. pro Tabelle eine Klasse, pro Datensatz ein Objekt.

Neben der Codegenerierung bietet Subsonic mit dem Querytool die Möglichkeit durchaus auch komplexe Abfragen ohne das Schreiben von SQL-Befehlen zur Laufzeit auszuführen.
Intern verwendet SubSonic das SQlCommand-Objekt. Somit ist das Tool auch gegen böse Absichten per SQL-Injection gewappnet.

Ein weiteres, nettes Feature sind die Webtools und ASP.NET-Cntrols die mit Subsonic zur Verfügung stehen.
Die Beispiel-Webanwendung verfügt z.B. über einen Codegerator, der über ein Webinterface bedient werden kann. Dabei kann festgelegt werden, für welche Tabellen die Zugriffsklassen
erzeuigt werden sollen und in welchem lokalen Verzeichnis die erzeugten Klassen gespeichert werden sollen. Es ist dabei auch möglich auszuwählen, ob für die Stored Procedures ebenfalls
Code generiert werden soll. Dazu bieted die Beispielanwendung auch ein Interface, über das alle Daten aller Tabellen (sofern sie die Voraussetzungen erfüllen - z.B. über einen Primary Key verfügen)
angezeigt und auch bearbeitet werden können. Diese Seite verwendet dabei das in Subsonic enthaltene ASP.NET-Cntrol "Scaffold".

Derzeit gibt es folgende Controls, die einfach über die Referenzierung der Subsonic.dll verwebdet werden können:

  • Scaffold

  • QuickTable

  • ManyManyList

  • DropDown

  • RadioButtons


Mit dem Scaffold-Control können alle Daten einer Tabelle schnell und editierbar in einem Gridview dargestellt werden. Im Editiermodus werden dabei verknüpfte LookUp-tabellen berücksichtigt und die möglichen
Auswahlwerte in einer DropDownListe dargestellt.

Damit aber noch nicht genug. Subsonic kann ins VisualStudio integriert werden. Damit lässt sich per Knofdruck der Code generieren, das Datenbankschema und auch ein Sql-Script über das die vorhanden Daten (z.B. Standardwerte)
importiert werden können.

Mein persönliches Fazit:
Daumen hoch! Ich finde das Tool sehr gelungen und insbesondere in kleineren Projekten sehr sehr hilfreich und zeitsparend. Vor allem die einfache Integration und Verwendung
überzeugt meiner Meinung nach. Ein wenig Erfahrung mit .NET vorausgesetzt und man kann ohne große Einarbeitung und Hürden mit Subsonic produktiv werden. Die vom Codegenerator
erzeugten Klassen sind ebenfalls einfach aufgebaut und lassen sich intuitiv verwenden. Ich bin gespannt, was zukünftige Versionen noch mit sich bringen.

Demnächst möchte ich auf meinem Blog noch etwas detailierter auf Subsonic eingehen - mit Codebeispielen etc. // to be continued

Hier findet Ihr alles weitere zuum Thema SubSonic

2 Kommentare:

Anonym hat gesagt…
Dieser Kommentar wurde vom Autor entfernt.
Anonym hat gesagt…

Subsonic scheint ein sehr interessantes Tool resp. Framework zu sein. Bin schon gespannt auf die angekündigten Code-Beispiele. Insbesondere würde mich interessieren wie SubSonic im Zusammenspiel mit Stored Procedures funktioniert.