Возврат универсальной коллекции <object>в методе интерфейса без приведения к объекту в реализации - PullRequest
1 голос
/ 09 октября 2011

Я смотрю на добавление некоторых базовых функций поиска и фильтрации универсальным / стандартизированным способом к моим веб-сервисам 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?Например, могу ли я достичь чего-то «чище» с помощью базового класса и извлечь из него ресурс для поиска?

1 Ответ

1 голос
/ 09 октября 2011
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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...