За последние два года я разработал некоторые приложения Winforms на основе данных, и все работает нормально. Это приложение построено на слоях (DataAccess, Business Logic и UI). Что касается логики Businness, все мои объекты наследуются от базового класса 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 для уровня пользовательского интерфейса.
Мой вопрос, для моей бизнес-логики: лучше ли хранить мои коллекции на основе BindingList (Of T), или я должен изменить свой базовый класс коллекции, чтобы он наследовал от ObservableCollection (Of T). Я хотел бы сохранить уникальную базовую коллекцию для всех моих проектов, которую можно использовать также в приложениях Winforms, WPF Application или ASP.NET.
Я также использую Linq to Objects в своих проектах, поэтому у меня нет ограничений, поскольку мои проекты основаны только на фреймворке 2.0.
Спасибо
CLABER