返回通用<对象>;接口方法上的集合,无需在实现中转换为对象

发布于 2024-12-09 00:15:06 字数 1022 浏览 0 评论 0原文

我正在考虑以通用/标准化的方式向我的 WCF Restful Web 服务添加一些基本的搜索和过滤功能。

这个想法是客户端将 POST 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);
}

这个想法是,任何实现此接口的资源都可以进行优化搜索并限制结果集(分块列表具有对象集合和上一个/下一个块 uri)。

我遇到的问题是接口上有一个泛型 ChunkedList但实际实现想要返回 ChunkedListChunkedList 等,这给了我一个无效的强制转换异常。

我知道我可以使用 list.convert 手动将每个项目转换为一个对象,但对于每个实现来说都必须这样做会很痛苦。

是否有更合适的接口或 OO 模式可以用于此目的?例如,我可以使用基类实现一些“更干净”的东西,并从中派生出可搜索资源吗?

I'm looking at adding some basic search and filtering functionality in a generic/standardized way to my WCF Restful webservices.

The idea is a client will POST a SearchRequest to any container resource i.e. /users or /sessions - And the server should then construct a uri to the search results and redirect to them (POST-Redirect-GET pattern).

They way I think I need to do this (Open to suggestions) is that each searchable resource should implement an interface I define. That resource can then be used with the generic utilities I'll create for making this only a few lines of code to implement.

The interface I have come up with is:

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);
}

The idea being that any resource that implements this interface can do an optimized search and limit the result set (A chunked list has a collection of objects, and a prev/next chunk uri).

The problem I have is that the interface has a generic on it ChunkedList<object> but the actual implementations want to return ChunkedList<User> or ChunkedList<Session> etc. and this gives me an invalid cast exception.

I know I can use list.convert to manually cast each item to an object, but it would be pain for every implementation to have to do this.

Is there a more appropriate interface or OO pattern to use for this? For example could I achieve something "cleaner" with a base class and derive the searchable resource off of that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素染倾城色 2024-12-16 00:15:06
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);
}
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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文