This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: WPF, NHibernate, ObservableCollection und Patterns
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Im Beitrag ObservableCollection und NHibernate hatte ich einen Link zu einem Artikel gepostet, der zeigt, wie man NHibernate dazu bringt, mit einer ObservableCollection zu arbeiten.
Nun, ein paar Tage später, finde ich die Sache dann doch nicht mehr ganz so toll, gerade wenn Patterns mit ins Spiel kommen (was hoffentlich der Fall ist). Man nehme als Beispiel die bereits von mir vorgestellten Patterns MVC für WPF und Model-View-ViewModel. Diese beiden Patterns unterscheiden sich unter anderem dadurch, dass beim MVC Controller und Model komplett getrennt sind. Beim MVVM ist dies zwar auch der Fall, jedoch stellt das ViewModel sowohl die Controller-Funktionalität zur Verfügung, als auch eine gewrappte Form des Models.
Was bedeutet dies nun konkret? Bei der Verwendung des MVVM Patterns zusammen mit NHibernate bedarf es keiner speziellen Erweiterung oder Anpassung. Das Model verwendet weder eine ObservableCollection noch wird irgendein für WPF benötigtes Interface implementiert (siehe beispielsweise INotifyPropertyChanged). Damit ist es möglich, NHibernate zu nutzen, wie es auch ausgeliefert wird. Beim MVC-Pattern müsste hier der im verlinkten Artikel angesprochene Handkniff getätigt werden, um in den Genuss der für das Data Binding notwendigen Events zu gelangen.
Was kann daraus abgeleitet werden? Der zumindest für mich wesentliche Punkt ist, dass es sinnvoll wäre, das zu verwenden, was sich bereits vielfach bewährt hat. NHibernate hat sich bereits in sehr vielen Projekten bewährt und man kann sich auf eine korrekte Funktionsweise verlassen. Aus diesem Grund würde ich eher die Finger von einer ObservableCollection-spezifischen Erweiterung lassen (auch wenn es lediglich eine Handvoll Klassen sind) und hier auf das MVVM-Pattern zu setzen, welches eben diese Änderung nicht benötigt.
Damit muss man sich bei einem Update keine Sorgen machen und wer weiß, vielleicht gibt es ja bald eine entsprechende Unterstützung.