2011-10-08 34 views
1

我正在尋找以通用/標準化的方式向我的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模式用於此?例如,我可以用基類實現「更乾淨」的事情,並從中獲得可搜索的資源嗎?

+0

我剛看到這個http://stackoverflow.com/questions/7433279/is-it-possible-to-have-an-interface-method-defined-with-a-generic-return-類型 - 和 - 我認爲這就是我想要的,一個通用的接口,但有實現定義類型。這在c#中可能嗎? – Tyler

+1

'ChunkedList '很無用。試着讓它成爲可通用的和'ChunkedList '以保持通用性。 –

+0

謝謝!我不知道我可以像這樣定義泛型接口:)如果你想發佈這個作爲答案,我會接受它,因爲你在第一,否則我標記Yochai的答案。 – Tyler

回答

1
public interface ISearchable<T> 
{ 
    ChunkedList<T> GetAll(int chunkStart, int chunkEnd); 

    ChunkedList<T> SearchByValue(string searchValue, int chunkStart, int chunkEnd); 

    ChunkedList<T> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd); 
} 

class myClass: ISearchable<myClass> 
{ 
    ChunkedList<myClass> GetAll(int chunkStart, int chunkEnd); 

    ChunkedList<myClass> SearchByValue(string searchValue, int chunkStart, int chunkEnd); 

    ChunkedList<myClass> SearchByValueWithFilters(string searchValue, List<string> filters, int chunkStart, int chunkEnd); 
} 
相關問題