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

时间:2010-02-22 17:49:42

标签: .net design-patterns

说我有一个如下的基本界面:

public interface IObjectProvider
{
    IEnumerable<IObject> GetObjects();
}

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

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

public interface IObjectProvider
{
    ReadOnlyObservableCollection<IObject> Objects
    {
        get;
    }
}

编辑1:

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

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

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

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

1 个答案:

答案 0 :(得分:5)

您可以随时使用这些界面,例如INotifyPropertyChangedINotifyCollectionChanged

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