我正在尋找以通用/標準化的方式向我的WCF Restful webservices添加一些基本的搜索和過濾功能。返回通用<object>集合的接口方法,而不是轉換爲實現對象
這個想法是一個客戶端將一個SearchRequest發送到任何容器資源,即/ users或/ sessions - 然後服務器應該構造一個uri到搜索結果並重定向到它們(POST-Redirect-GET模式)。
他們的方式,我認爲我需要這樣做(對建議開放)是每個可搜索的資源應實現我定義的接口。然後,該資源可以與我將創建的通用實用程序一起使用,以實現這幾行代碼。
我想出的接口是:
public interface ISearchable
{
ChunkedList<object> GetAll(int chunkStart, int chunkEnd);
ChunkedList<object> SearchByValue(string searchValue, int chunkStart, int chunkEnd);
ChunkedList<object> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd);
}
的想法是,實現該接口可以做一個優化的搜索和限制結果集的任何資源(A組塊列表中有對象的集合,和prev/next塊uri)。
我遇到的問題是接口有一個通用的ChunkedList<object>
,但實際的實現想要返回ChunkedList<User>
或ChunkedList<Session>
等,這給了我一個無效的轉換異常。
我知道我可以使用list.convert手動將每個項目轉換爲一個對象,但是對於每個實現都必須這樣做。
是否有更合適的接口或OO模式用於此?例如,我可以用基類實現「更乾淨」的事情,並從中獲得可搜索的資源嗎?
我剛看到這個http://stackoverflow.com/questions/7433279/is-it-possible-to-have-an-interface-method-defined-with-a-generic-return-類型 - 和 - 我認爲這就是我想要的,一個通用的接口,但有實現定義類型。這在c#中可能嗎? – Tyler
'ChunkedList
謝謝!我不知道我可以像這樣定義泛型接口:)如果你想發佈這個作爲答案,我會接受它,因爲你在第一,否則我標記Yochai的答案。 – Tyler