過去 2 年間、データベースの Winforms アプリケーションをいくつか開発してきましたが、すべて正常に動作しています。このアプリケーションは、レイヤー (データ アクセス、ビジネス ロジック、UI) 上に構築されています。ビジネス ロジックの場合、すべてのオブジェクトは、次の定義を持つ BaseEntity という基本クラスから継承されます (フレームワーク要素と組み合わされたカスタム オブジェクトとインターフェイスがいくつかあります)。
Public MustInherit Class BaseEntity
Inherits SerializableObject
Implements IEntity
Implements IComparer, _
IEditableObject, _
INotifyPropertyChanging, INotifyPropertyChanged, _
IApplicationSecurity
End Class
同じコア ライブラリに、汎用の基本コレクション BaseEntityCollection があります。これらのコレクションを使用すると、各オブジェクトに対して、関連する厳密に型指定されたコレクションを定義できます。これは、データベース アプリケーションでは非常に興味深いものです。基本定義は次のとおりです。
Public MustInherit Class BaseEntityCollection(Of T As BaseEntity)
Inherits BindingList(Of T)
Implements IEntityCollection
Implements INotifyPropertyChanged, INotifyPropertyChanging, ICopyable(Of T)
Implements IDisposable
Implements ISerializable
End Class
ご覧のとおり、Winforms で正しいデータバインディングを行うために必要なものはすべて使用しています。
- オブジェクトの INotifyPropertyChanged、INotifyPropertyChanging、IEditableObject。
- 私のコレクション用の BindingList(Of T) に基づくコレクション。
私は新しいテクノロジーにも興味があるので、最近 WPF に関するウェブキャストをいくつか見ました。これらのウェブキャストでは、コレクションとデータバインディングのサポートの基本クラスとして ObservableCollection(Of T) が使用されています。
UI レイヤーのアプリケーションの一部を Winforms から WPF に移行することを考えています。
私の質問は、ビジネス ロジックの場合、コレクションを BindingList(Of T) に基づいて保持する方がよいか、それとも基本コレクション クラスを変更して ObservableCollection(Of T) から継承するようにする方がよいかということです。Winforms アプリケーション、WPF アプリケーション、または ASP.NET でも使用できる、すべてのプロジェクトで一意の基本コレクションを保持したいと考えています。プロジェクトでは Linq to Objects も使用しているため、プロジェクトをフレームワーク 2.0 のみに基づいて保持しても制限はありません。
ベストアンサー1
答えはそこにあると思います:http://xceed.com/CS/blogs/dontpanic/archive/2009/04/01/i-notify-we-notify-we-all-wait-no-we-don-t.aspx
簡単に言うと、ObservableCollection は子の変更をリッスンせず、Insert イベントと Remove イベントのみをリッスンします。
一方、BindingList は、その子によって発生した変更と更新をリッスンします。ただし、Binding リストは変更通知を伝播するためにすべての子をリッスンする必要があるため、メモリ負荷が増加します。
これが役に立つことを願っています:)
--ブルーノ