У меня есть веб-сервис, который предоставляет интерфейс для запроса данных. Я пишу приложение WPF с использованием MVVM. Я работаю над созданием хранилища, которое мои модели просмотра могут использовать для извлечения моделей. Хранилище будет вызывать Web-сервис для извлечения данных, когда это необходимо.
Мне потребуются различные методы Find в моем хранилище, которые находят данные на основе различных критериев, а не только одного критерия, такого как "Id".
В моем репозитории я создал метод Find, который принимает спецификацию в качестве ввода
void IList<MyData> Find (ISpecification spec)
где базовый интерфейс ISpecification -
public interface ISpecification<T>
{
bool IsSatisfiedBy(T candidate);
}
Реализация метода Find на высоком уровне будет выглядеть следующим образом
- сначала ищет в кэше кандидатов, которые удовлетворяют спецификации
- Если найдено, вернуть список кандидатов
- В противном случае используйте спецификацию / критерии для вызова веб-службы, чтобы выбрать кандидатов и вернуть список
Я запутался в сценарии «Остальное», описанном выше - как правильно спроектировать спецификацию, чтобы, если у меня нет данных в кеше репозитория, удовлетворяющих спецификации, я мог получить критерии из спецификации и вызвать Интернет Служба прохождения веб-метода по этим критериям?
Несколько вещей в моей голове-
- Если я специализируюсь на поиске методов для получения специализированных спецификаций, которые имеют свойства / критерии, тогда Репозиторий - Спецификация имеет тесную связь
- Если бы мне пришлось подключаться напрямую к БД (а я нет), я мог бы, например, поддержать метод, который возвращает SQL. LINQ мог бы быть вариантом и т. Д.