我有一個名爲IFilterDataSourceAdapter
的接口。此接口公開端點以適應輸入數據源(IEnumrable<T>
,iCollectionView
或DataTable
或DataView
或XmlDocument
),並提供直觀地過濾它們的功能。類別和功能選擇性泛型
- 它接受數據源中字段的名稱。
主要生產的
FilterFields
列表中的每個暴露三個屬性- 名稱基於字段的
Type
- 的濾波器算表的字段 - 等於,包含,小於等
- 提供價值領域。
圖形用戶界面可以使用此
FilterField
列表來顯示過濾器面板。- 名稱基於字段的
- 適配器將提供自己的
ICommand
以從GUI執行過濾器調用。
所以在THW適配器,我想要做以下
- 如果傳入的數據源是
IEnumrable<SomeClass>
類型時,應用濾鏡我會產生AsQueryable()
LINQ表達式和揭露查詢IEnumrable<SomeClass>
列表回來。 - 如果傳入的數據源是
ICollectionView
類型,我會生成Filter
委託並刷新集合視圖。 - 如果傳入的數據源類型爲
DataTable
或DataView
我會生成DataFilter
基於字符串的查詢並刷新數據表或數據視圖。 - 如果傳入的數據源是
XDocument
類型,則會生成XPath
表達式和XElements
過濾的列表。
我想根據Generics
約束於上述類型的數據源,並相應的Filter
命令執行之間還區分做到這一點。
我們可以有一個單一的接口IFilterDataSourceAdapter<T>
被約束爲基於在T其成員(字段和函數)是要麼IEnurable<SomeClass>
或ICollectionView
或DataTable
或DataView
或XDocument
?
編輯:
我目前的實現實際上是5種每種類型的數據源的asbtract適配器和他們工作的罰款。他們全部實施IFilterDataSourceAdapter
。但是我認爲可能是我們可以制定具有約束條件的IFilterDataSourceAdapter<T>
,而不是更適合每個適配器實現方式的設計。所以可能是我已經很好了。
可能是我超越了事物!