我正在寻找以通用/标准化方式向我的WCF Restful webservices添加一些基本搜索和过滤功能。
这个想法是客户端将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);
}
实现此接口的任何资源都可以执行优化搜索并限制结果集(分块列表包含对象集合,以及prev / next chunk uri)。
我遇到的问题是接口上有一个泛型ChunkedList<object>
,但实际的实现想要返回ChunkedList<User>
或ChunkedList<Session>
等等,这给了我一个无效的强制转换异常。
我知道我可以使用list.convert手动将每个项目转换为一个对象,但是每个实现都必须这样做。
是否有更适合的接口或OO模式?例如,我可以使用基类实现“更干净”的东西并从中获取可搜索的资源吗?
答案 0 :(得分: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);
}