Я предлагаю создать ваш объект / компонент поиска в качестве прокси объекта для службы WCF.Он может работать несколькими способами, но самое простое, что приходит мне в голову:
- Реализация службы WCF с методами для предоставления всех
Products
сущностей и запрашиваемой (например,на основе кода продукта) - Реализуйте компонент, который будет использовать клиент WCF для получения продуктов, назовем его
ProductsProvider
- Ваши модели представлений будут зависеть от
ProductsProvider
(например, через Внедрение в конструктор )
Ключевым элементом в этой модели является ProductsProvider
- он будет работать как тип кэша для Products
объектов.Во-первых, он попросит веб-сервис для всех продуктов (или какой-то их части, по вашему вкусу), чтобы начать с.Затем, когда вам нужно найти продукт, вы спрашиваете поставщика - это обязанность поставщика решить, как продукт должен быть найден - может быть, он уже находится в локальном списке?Может быть, для обновления нужно будет вызвать веб-сервис?Пример:
public class ProductsProvider
{
private IList<Product> products;
private IProductsService serviceClient;
public ProductsProvider(IProductsService serviceClient)
{
this.serviceClient = serviceClient;
this.products = serviceClient.GetAllProducts();
}
public Product LookUpProduct(string code)
{
// 1: check if our local list contains product with given code
// 2: if it does not, call this.serviceClient.LookUpProduct
// 3: if service also doesn't know such product:
// throw, return null, report error
}
}
Теперь, что это дает вам:
- вам нужно всего лишь один
ProductsProvider
экземпляр - лучшая гибкость благодаря тому, когда и как называется ваш сервис
- вашим моделям представлений вообще не придется иметь дело с WCF
Редактировать:
Что касается вашего второго вопроса.Управление может не потребоваться, но хорошая модель представления для Product
сущности, безусловно, хорошая идея.