У меня есть веб-служба, которая предоставляет интерфейс для запроса данных. Я пишу приложение WPF с использованием MVVM. Я работаю над созданием репозитория, который мои модели просмотра могут использовать для извлечения моделей. При необходимости репозиторий будет вызывать веб-службу для извлечения данных.WPF MVVM - запрос шаблона репозитория
Мне понадобится различный Найти методов в моем репозитории, которые находят данные на основе различных критериев, а не только одного критерия, такого как «Id».
В моей Repository, я создал метод Find, который принимает Спецификации в качестве входных данных
void IList<MyData> Find (ISpecification spec)
, где основной интерфейс ISpecification является
public interface ISpecification<T>
{
bool IsSatisfiedBy(T candidate);
}
Высокого уровня реализации внешней методы Find будет следующим:
- первый поисковик S кэш для кандидатов, удовлетворяющих спецификации
- Если найдено вернуть список кандидатов
- Else использовать спецификации/критерии для вызова веб-службы для извлечения кандидатов и вернуть список
Я смущен о Следующий сценарий выше. Каков правильный способ разработки спецификации, чтобы, если у меня нет данных в кэше репозитория, который удовлетворяет спецификации, я должен получить критерии из спецификации и вызвать веб-сервис, передающий веб-метод этим критериям?
Несколько вещей, на мой mind-
- Если я специализируюсь Найти методы принимать специальные характеристики, которые имеют свойства/из условий, то Repository - Спецификация имеет жесткой связи
- Если бы я подключить непосредственно к БД (чего я не знаю), тогда я мог бы поддерживать метод, который возвращает SQL, например. LINQ мог бы быть опцией и т. Д.
Спасибо, Хосе. Раньше я не использовал LINQ. Теперь мой вопрос будет переведен на: если я использую LINQ Expression в качестве параметра функции «Найти», то как преобразовать это выражение в параметры, которые требуется для метода веб-службы? Выражение, безусловно, поможет мне в кеше памяти/сбор данных, но мой главный вопрос касался вызова сценария веб-сервиса. – byte
Я думаю, что самым легким было бы иметь вебсервис в дереве выражений в качестве параметра, а также реализовать IQueryable в веб-службе (например, Linq To SQL), а затем просто передать это выражение в веб-службе, а затем вы не нужно разбираться, просто прокладывая доллар. :) – Jose
Спасибо. Проблема в том, что я не могу изменить веб-службу. Это также не может быть веб-службой .NET (может быть Java или C++ в unix). Таким образом, WebMethod будет чем-то вроде Строка FindMembers (string lastname, int minAge, строка city) где тип возврата - это XML как строка – byte