用于通知应用程序集合已更改的模式?

Sam*_*ell 0 .net design-patterns

假设我有一个如下所示的基本界面:

public interface IObjectProvider
{
    IEnumerable<IObject> GetObjects();
}
Run Code Online (Sandbox Code Playgroud)

对象源是可能更新的某个后备存储,并且此接口的实现负责使用该后备存储.现在,我希望此接口的使用者能够在此接口提供的对象集合发生更改时执行操作.您将如何重构此界面以提供此功能?我希望结果可用于应用程序中的许多"提供者"接口,以获得良好的设计一致性.

示例:以下以简明易懂的方式提供此功能,但增加了重要的耦合(包括对.NET 4.0之前的代码中的WPF程序集的引用).我应该只使用它,因为我们知道一旦代码进入.NET 4.0,它将自动"更轻"吗?

public interface IObjectProvider
{
    ReadOnlyObservableCollection<IObject> Objects
    {
        get;
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑1:

根据Reed的回答,我倾向于保持IObjectProvider接口不变,原因如下:

  • 这是一个新的应用程序,因此可以尽早记录设计,并始终保持一致性.
  • 声明对于所有提供者,如果提供者支持提供的集合发生更改的通知,则返回的值GetObjects()必然会实现INotifyCollectionChanged.

还有另外两个案例,我仍然需要在我的设计中考虑:

  • 提供的集合永远不会改变.
  • 提供的集合可能会更改,但客户端需要轮询是否需要更新.我是否可以声称应用程序中不存在此案例(这是一个好主意)?

Ree*_*sey 5

您可以始终使用接口,例如INotifyPropertyChangedINotifyCollectionChanged.

这将允许您使用自定义集合和标准接口,而无需引用WPF.