Opracowałem kilka aplikacji WinForm opartych na danych w ciągu ostatnich dwóch lat i wszystko działa dobrze. Ta aplikacja jest zbudowana na warstwach (DataAccess, Business Logic i UI). Dla businness Logic, wszystkie moje obiekty dziedziczą z klasy bazowej o nazwie BaseEntity z poniższej definicji (istnieją pewne obiekty niestandardowe i interfejsy, w połączeniu z elementami ramowymi):ObservableCollection (Of T) vs BindingList (Of T)?
Public MustInherit Class BaseEntity Inherits SerializableObject Implements IEntity Implements IComparer, _ IEditableObject, _ INotifyPropertyChanging, INotifyPropertyChanged, _ IApplicationSecurity End Class
w tej samej bibliotece rdzenia Mam ogólną kolekcję bazową BaseEntityCollection. Kolekcja ta pozwala mi zdefiniować dla każdego obiektu jego powiązaną kolekcję o silnym typie, która jest bardzo interesująca w aplikacjach opartych na danych. Tutaj jest to definicja podstawa:
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
Jak widać, używam wszystkie rzeczy, które są potrzebne do prawidłowego wiązania z danymi w WinForm:
- INotifyPropertyChanged, INotifyPropertyChanging, IEditableObject dla obiektu.
- Kolekcja oparta na BindingList (Of T) dla mojej kolekcji.
Jestem również zainteresowany nowymi technologiami, więc ostatnio obejrzałem trochę webcastu na temat WPF. W tym webcastu używają one jako klasy bazowej do obsługi zbierania i wiązania danych ObservableCollection (Of T).
Myślę o migracji niektórych moich aplikacji z WinForm do WPF dla warstwy interfejsu użytkownika.
Moje pytanie brzmi, dla mojej logiki biznesowej, czy lepiej utrzymywać moje kolekcje w oparciu o BindingList (Of T), czy też powinienem zmienić swoją podstawową klasę kolekcji, aby dziedziczyła z ObservableCollection (Of T). Chciałabym zachować unikalną kolekcję bazową dla wszystkich moich projektów, która może być używana również w aplikacjach WinForm, WPF lub ASP.NET. Używam także Linq to Objects w moich projektach, więc nie mam ograniczeń, utrzymując moje projekty w oparciu o tylko framework 2.0.
Dzięki,
CLABER
'ObservableCollection' jest bezpieczna dla wątków, nie wiem o BindingList. – Shimmy
To nie jest poprawne. Dokumentacja Microsoft wyraźnie stwierdza, że ObservableCollection nie jest bezpieczna dla wątków. http://msdn.microsoft.com/en-us/library/ms668604.aspx – kevindaub
1-cia stwierdzenie jest błędne ponieważ ObservableCollection dziedziczy Collection Kolekcja i implementuje IList interfejs. –