我在过去两年中开发了一些基于数据的Winforms应用程序,所有工作都很顺利。这些应用程序是基于层构建的(DataAccess、Business Logic和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迁移到WPF的UI层。
我的问题是,对于我的业务逻辑,是更好地保持基于BindingList(Of T)的集合还是应该更改我的基本集合类使其继承自ObservableCollection(Of T)。我想保持一个唯一的基本集合,可在所有项目中使用,包括Winforms应用程序、WPF应用程序或ASP.NET。 我也在我的项目中使用Linq to Objects,因此我没有限制仅基于框架2.0。