head.WriteLine()

Sonntag, März 07, 2010

Just Released: Thinktecture.DataObjectModel

Bei der Entwicklung verteilter Anwendungen steht man als Entwickler häufig zwischen den Stühlen. Denn je nach Schicht ist man mit teilweise gegenläufige Anforderungen konfrontiert. Dies betrifft vor allem das Domänenmodell:
  • Aus Sicht der Middle Tier sollten Datenklassen dem POCO- bzw. DTO-Ansatz folgen, um eine möglichst hohe Interoperabilität zu gewährleisten.
  • Die Datenbankseite interessiert sich hingegen in erster Linie für die Originalwerte der geänderten Objekte, um die Datenkonsistenz bei parallelen Zugriffen gewährleisten zu können. Zudem ist auch Transaktionsunterstützung von Vorteil.
  • Auf Clientseite sollen die Objekte möglichst einfach gebunden werden können. Darüber hinaus müssen Änderungen verfolgt werden können, um eine spätere Aktualisierung zu gewährleisten. Der Anwender freut sich hingegen über Inline-Validierung und Undo/Redo-Support. Auch das dynamische Erstellten von Sortier- und Filterregeln zur Laufzeit ist sehr beliebt.
Das Problem ist nur, dass die vorhandenen Frameworks (WCF/WPF/EF) keine durchgängige Story für Datenklassen bieten, die allen Seiten gerecht wird.
Daher habe ich in den letzten Monaten an einem Framework gearbeitet, das diesen Missstand beheben soll: Das Thinktecture.DataObjectModel steht nun in einer ersten Betaversion auf CodePlex zu Verfügung.
Die wichtigsten Features:
  • Support für Data Binding
    (inkl. Validierung, Change Tracking und Undo/Redo-Support)
  • Dynamische Attributierung von Properties
    (DisplayName, ReadOnly, Browsable, Ordinal, …)
  • Implementierung von Views
    (inkl. Sortieren, Filtern, Computed Columns, etc.)
  • Automatische Speicherung von Originalwerten für die Behandlung von Konkurrenzsituationen auf Datenbankseite.
  • Übertragen von Objekten, inkl. Änderungen an WCF-Services
  • Unterstützung von System.Transactions. So können alle Objekte automatisch an lokalen oder verteilten Transaktionen teilnehmen.
Für die Verwendung kann die entsprechende Datenklasse entweder von einer Basisklasse ableiten, oder sie wird zur Laufzeit über einen Runtime Proxy mit der beschriebenen Funktionalität ausgestattet. Auf diese Weise können zum Beispiel auch Modelle vom Entity Framework oder anderen O/R-Mappern flexibel erweitert werden.
Weitere Informationen finden Sie auf http://dataobjectmodel.codeplex.com. Hier gibt’s nicht nur die Sourcen, sondern auch einige Beispiele für Windows Forms und WPF.
Darüber hinaus erscheint in den nächsten Monaten eine vierteilige Artikelserie in der dotnetpro, in der ich das Framework detailliert beschreiben werde.
Falls Sie Fragen oder Anregungen haben, geben Sie Feedback über das Forum der Codeplex-Seite oder per Mail (joerg neumann at thinktecture de)!

Labels:

4 Comments:

  • IEditableObject, INotifyPropertyChange/d

    Ich beschäftige mich gerade mit APO. Beim durchlesen Ihre Implementierung kamm mir die Idee, das dies doch ein schönes Beispiel für den Einstatz von APO ist.
    * Mit dem APO Framwork PostSharp (Post compiler) würde zumdem die Erstellung von Proxies zur Laufzeit entfallen
    * Via "Code weaving" würde keine Klasse aus einem gegebenen Namensraum vergessen werden.

    By Blogger Unknown, at März 13, 2010 3:22 PM  

  • Ich denke, es ist einfach zu viel Funktionalität für Post Compiling. Darüber hinaus finde ich es nicht sinnvoll in jedem Typ redundanten Code hinein zu kompilieren. Post Compiling würde ich eher für einfache Sachen, wie die Implementierung von INofifyPropertyChanged und co. verwenden.

    By Blogger Jörg Neumann, at März 15, 2010 8:41 AM  

  • Ein T4 Template zum erstellen von Entity Framework Datenklassen die von EntityObject erben und die Funktionalität bereits implementieren wäre hiflreich.

    By Anonymous Marcel, at September 23, 2010 11:18 PM  

  • Das ist schwierig, da die Funktionalität in der Basisklasse DataObject steckt. Wenn Du von EntityObject ableiten willst, kannst Du aber die Runtime Proxy-Funktionen von TT.DOM nutzen.

    By Blogger Jörg Neumann, at September 27, 2010 9:52 AM  

Kommentar veröffentlichen

<< Home