He desarrollado algunas aplicaciones de Winforms basadas en datos en los últimos dos años y todo funciona bien. Esta aplicación está construida en capas (DataAccess, Business Logic y UI). Para la lógica de Businness, todos mis objetos heredan de una clase base llamada BaseEntity con la definición siguiente (hay algunos objetos e interfaces personalizados, combinados con elementos del marco):ObservableCollection (Of T) vs BindingList (Of T)?
Public MustInherit Class BaseEntity Inherits SerializableObject Implements IEntity Implements IComparer, _ IEditableObject, _ INotifyPropertyChanging, INotifyPropertyChanged, _ IApplicationSecurity End Class
En la misma biblioteca central , Tengo una colección base genérica BaseEntityCollection. Esta colección me permite definir, para cada objeto, su colección fuertemente tipada relacionada, que es muy interesante, en aplicaciones basadas en datos. Aquí está su definición de base:
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
Como se puede ver, yo uso todo el material que se necesita para el enlace de datos correcto en Windows Forms:
- INotifyPropertyChanged, INotifyPropertyChanging, IEditableObject para el objeto.
- Una colección basada en BindingList (Of T) para mi colección.
También me interesan las nuevas tecnologías, así que recientemente vi un webcast sobre WPF. En este webcast, utilizan como clase base para la colección y el soporte de datos ObservableCollection (Of T).
Estoy pensando en migrar algunas de mis aplicaciones de Winforms a WPF para la capa de IU.
Mi pregunta es, para mi lógica empresarial, ¿es mejor mantener mis colecciones basadas en BindingList (Of T) o debería cambiar mi clase de colección base para que herede de ObservableCollection (Of T). Me gustaría mantener una colección base única para todos mis proyectos, que se pueda usar también en aplicaciones de Winforms, aplicaciones WPF o ASP.NET. También estoy usando Linq to Objects en mis proyectos, por lo que no tengo restricciones al mantener mis proyectos basados únicamente en framework 2.0.
Gracias,
CLABER
'ObservableCollection' es seguro para subprocesos, no sé sobre BindingList. – Shimmy
Eso no es correcto. La documentación de Microsoft establece explícitamente que el ObservableCollection no es seguro para subprocesos. http://msdn.microsoft.com/en-us/library/ms668604.aspx – kevindaub
primera afirmación es errónea ya ObservableCollection hereda Colección y Colección sí implementa la interfaz iList . –