Freitag, 24. Juli 2009

CCD Reflektion – Roter Grad Tag 4

Gestern kam ich endlich wieder zum Programmieren; und das sowohl beruflich als auch privat.

Bei meinem derzeitigen beruflichen Projekt, der Erweiterung eines vor Jahren von mir erstellten Reporting Tools, konnte ich meine ersten “richtigen” Erfahrungen mit LINQ sammeln und habe dadurch den Input zum heutigen Post erhalten.

Eigentlich beginnt es damit, dass ich den Gedanken, meine vorhandene Datenbankstruktur mit NHibernate zu mappen, aufgegeben habe. Einerseits stand da Zeitdruck dahinter, da ich gewisse Meilensteine zügig erreichen muss, zum Andern musste ich erkennen, dass ich bei einem vollständigen DB-Schema fast zwangsläufig in einem “anemic model” Ende, dass lediglich eine DTO-Schicht über der Datenbank darstellt.

Also habe ich die Umstellung auf ein ORM verschoben. Mittelfristig muss das Modell sowieso komplett umgebaut werden und das ist der geeignete Zeitpunkt, ein Klassenmodell als Ursprung aller Modelle zu verwenden.

Bis dahin muss ich aber trotzdem auf die Daten zugreifen. Ursprünglich hatte ich den Datenzugriff über DataSets realisiert, aber genau diesen Ansatz will ich ablösen. Nacktes ADO.NET (DataReader und Commands) will mir auch nicht recht gefallen, also habe ich alle Tabellen mit Hilfe des VS-Designers in Linq2Sql erstellt.

Vom Ergebnis bin ich hin und her gerissen. Der Code, den auf Basis diesen Ansatzes erstellen konnte, ist kurz und gut lesbar. Beim Bereitstellen der Daten für das Reporting ist der Abgleich von Daten aus verschiedenen Quellen eine Hauptanforderung und Linq2Objects liefert hier mächtige Werkzeuge an die Hand.

Andererseits ist die Vermengung von Linq2Objects und Linq2Sql wiederum sehr komplex und durch die Kopplung an die Datenbank fast unmöglich isoliert zu testen.

Was ist also mein Fazit zu Linq? Linq2Objects ist sehr mächtig und erlaubt effektiv funktionales Programmieren in C#.

Auf Datenbanken werde ich mit Linq in Zukunft aber nur sehr isoliert zugreifen. Hier meine ich vor allem den Ansatz, Repositories zu benutzen, damit es möglich ist, den Datenzugriff in Tests durch Stubs oder Mocks zu simulieren.

Keine Kommentare: