在过去的两年里,我开发了一些基于数据的 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) 的基类。
我正在考虑将我的一些应用程序从 Winforms 迁移到 UI 层的 WPF。
我的问题是,对于我的业务逻辑,是更好地保留基于 BindingList(Of T) 的集合还是应该更改我的基本集合类以使其继承自 ObservableCollection(Of T)。我想为我的所有项目保留一个独特的基础集合,它也可以在 Winforms 应用程序、WPF 应用程序或 ASP.NET 中使用。我还在我的项目中使用 Linq to Objects,所以我的项目仅基于框架 2.0 并不受限制。