jenswinter.com
Software Development 24/7

Buchempfehlung: Pro ADO.NET 2.0

January 22, 2006 21:31 by Jens
Ich lese momentan das Buch "Pro ADO.NET 2.0" von Sahil Malik. Und ich kann sagen, dass das Geld dafür sehr gut investiert war. Es wirklich hervorragend. Auf dem Frontcover des Buches steht ein Satz, den ich zunächst für ziemlich vermessen hielt: "The only ADO.NET book you will ever need." Naja, was soll ich sagen. Da könnte was dran sein...

Man merkt, dass Sahil (MVP C#) wirklich Ahnung vom Thema hat. Der Schreibstil ist sehr locker und macht es leicht, auch komplizierte Sachverhalte verständlich zu vermitteln. Der Aufbau ist sehr übersichtlich gestaltet. Mit vierzehn Kapiteln ist es weder überladen, noch zu oberflächlich. Trotzdem schafft es Sahil, ziemlich detailliert die Abläufe und Internas von ADO.NET 2.0 zu beschreiben.
Sämtliche Beispiele werden begleitet von C#- und VB.NET-Quelltext. Ob diese durchgängig doppelten Quelltexte in den beiden Programmiersprachen notwendig sind, darüber lässt sich streiten.

Inhalt:

 

  1. Introduction to ADO.NET
  2. The ADO.NET Object Model
  3. ADO.NET Hello World!
  4. Connection to a Data Source
  5. Retrieving Data in a Connected Fashion
  6. DataSets
  7. Fetching Data: The DataAdapter
  8. Sorting, Searching and Filtering
  9. Updating Data
  10. Updating Data: Advanced Scenarios
  11. Transactions
  12. XML and ADO.NET
  13. The CLR in SQL Server
  14. ADO.NET Best Practices


Side-Effect-Free Functions

January 12, 2006 21:29 by Jens

"Side-Effect-Free Function" heißt übersetzt soviel wie "Funktion ohne Nebenwirkung". Es handelt sich hier um ein einfaches, und trotzdem wirkungsvolles Konzept in Domain-Driven Design.

Grundsätzlich kann man Operationen in zwei Kategorien unterteilen: Kommandos (Commands) und Funktionen (Queries).

Dabei sind Kommandos Methoden, die den Zustand des Systems sichtbar verändern. Das kann zum Beispiel so etwas Einfaches sein wie das Ändern einer privaten Variablen, oder etwas Komplexeres wie das Speichern von Daten in eine Datenbank. Kommandos liefern dabei keine, für die Domänen relevanten Daten an den Aufrufer zurück. Die einzigen Rückgabewerte von Kommandos könnten Statusinformationen sein. Also beispielsweise die Information, ob die Aktion erfolgreich oder erfolglos war.

Funktionen hingegen sind Methoden, die ein Ergebnis zurückliefern. Das kann zum Beispiel der Inhalt einer privaten Variable, das Ergebnis einer Berechnung oder auch einer Datenbankabfrage sein. Das Entscheidende hier ist, dass während der Ausführung der Funktion keinerlei sichtbare Änderungen am System stattfinden. Erst wenn das sichergestellt ist, haben wir es mit Side-Effect-Free Funtions zu tun.

Side-Effect-Free Functions bieten ernorme Vorteile gegenüber Funktionen mit Nebeneffekten. Deshalb sollte man grundsätzlich auf eine Trennung der Methoden in Kommandos und Funktionen ohne Nebeneffekten achten.
Side-Effect-Free Functions zeichnen sich zum Beispiel dadurch aus, dass mehrere Aufrufe mit denselben Parametern immer dasselbe Ergebnis liefern. Da sich der Zustand des Systems bei einem Aufruf nicht ändert verändert, muss das Ergebnis bei einem wiederholten Aufruf logischerweise das Gleiche sein.
Der Vorteil ist nun, dass das Risiko von ungewollten Effekten erheblich reduziert ist. Diese Funktionen können bedenkenlos von Client-Code oder von anderen Funktionen aufgerufen werden. Auch lassen sich solche Methoden viel besser testen. Das ist auch kein zu unterschätzender Vorteil.

Natürlich wird man kaum Anwendungen programmieren können, die nur Side-Effect-Free Functions verwendet. Man muss sicherlich auch Methoden aufrufen, die den Zustand des Systems beeinflussen. Das ist kein Problem, solange man die Logik ordentlich in Kommandos und Funktionen aufteilt. Das Ziel sollte sein, soviel Logik wie möglich in Side-Effect-Free Functions zu stecken und den Code von Kommandos so einfach wie möglich zu halten.