1

我有一个名为IFilterDataSourceAdapter. 此接口公开 EndPoints 以适应传入数据源(IEnumrable<T>iCollectionViewDataTableDataViewXmlDocument),并提供直观过滤它们的功能。

  1. 它接受来自数据源的字段名称。
  2. 生成FilterFields每个公开三个属性的列表

    1. 字段名称
    2. 根据字段的筛选运算符列表Type- 等于、包含、小于等。
    3. 提供的值字段。

    GUI 可以使用此FilterField列表来显示过滤器面板。

  3. 适配器将提供自己的ICommand以从 GUI 执行过滤器调用。

所以在适配器中,我想做以下

  1. 如果传入的数据源是类型,IEnumrable<SomeClass>我会在应用过滤器时生成AsQueryable() Linq 表达式并返回查询IEnumrable<SomeClass>的列表。
  2. 如果传入的数据源是类型,ICollectionView我将生成Filter委托并刷新集合视图。
  3. 如果传入的数据源是类型DataTable,或者DataView我会生成DataFilter基于字符串的查询并刷新数据表或数据视图。
  4. 如果传入的数据源是类型XDocument,它将产生XPath表达式和XElements过滤列表。

我想基于Generics上述类型的数据源来执行此操作,并Filter相应地区分命令执行。

我们可以IFilterDataSourceAdapter<T>基于 T 是IEnurable<SomeClass>or ICollectionViewor DataTableor or DataViewor来限制其成员(字段和函数)的单个接口XDocument吗?

编辑:

我当前的实现实际上是每种数据源的 5 种抽象适配器,它们工作正常。他们都实施IFilterDataSourceAdapter。但我认为也许我们可以IFilterDataSourceAdapter<T>使用约束而不是更适合每个适配器实现设计。所以可能是我已经很好了。

可能是我想太多了!!!

4

1 回答 1

1

可能不是答案,但评论太长了...根据我对您问题的理解,我会说您现在拥有的(具有不同接口的通用基本接口,每个接口都特定于数据源)很好。

我专门指的是你问题的这一部分:

我们可以IFilterDataSourceAdapter<T>基于 T 是IEnurable<SomeClass>or ICollectionViewor DataTableor or DataViewor来限制其成员(字段和函数)的单个接口XDocument吗?

如果您的“通用”接口应该根据其通用参数 T 的类型指定不同的实现,那么该接口实际上不是通用的,是吗?

使用泛型,您应该抽象出不同类型共有的行为,并且约束应该只允许您更精确地定义要为其定义这种常见行为的不同类型的集合。

于 2012-10-18T09:33:14.083 回答