Я смотрю на добавление некоторых базовых функций поиска и фильтрации универсальным / стандартизированным способом к моим веб-сервисам WCF Restful.
Идея состоит в том, что клиент отправит SearchRequest на любой ресурс контейнера, т. Е. / Users или/ сессий - и сервер должен затем создать 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);
}
Идея состоит в том, что любой ресурс, который реализует этот интерфейс, может выполнять оптимизированный поиск и ограничивать набор результатов (у чанкованного списка есть коллекция объектов и UUR предыдущего / следующего чанка).
Проблема, с которой я столкнулся,что интерфейс имеет универсальный ChunkedList<object>
, но фактические реализации хотят вернуть ChunkedList<User>
или ChunkedList<Session>
и т. д., и это дает мне недопустимое исключение приведения.
Я знаю, что могу использовать list.convertвручную приводить каждый элемент к объекту, но каждой реализации было бы больно делать это.
Существует ли для этого более подходящий интерфейс или шаблон OO?Например, могу ли я достичь чего-то «чище» с помощью базового класса и извлечь из него ресурс для поиска?