Шаблон агента службы WCF RIA со сложными запросами - PullRequest
1 голос
/ 07 февраля 2011

Я ищу рекомендации по абстрагированию контекста моего домена RIA от моделей представления, чтобы сделать их независимыми от источника данных.Похоже, лучшее решение, которое я могу найти, - это шаблон сервисного агента, описанный здесь .Однако, что если у меня есть относительно сложная логика запросов для выполнения?

Например, в настоящее время у меня есть контексты моего домена в моих моделях представления.Допустим, у меня есть ContactSearchViewModel, в котором есть небольшая логика, связанная с построением поискового запроса:

protected EntityQuery<Contact> CreateSearchQuery()
    {
        var query = Context.GetContactsQuery().Where(
                        e => e.First_Name.ToLower().StartsWith(FirstNameSearch.ToLower()) &&
                        e.Last_Name.ToLower().StartsWith(LastNameSearch.ToLower()));
        if (!string.IsNullOrEmpty(Phone))
        {
            query = query.Where(q => q.Phone == Phone ||
                                     q.Mobile == Phone ||
                                     q.Work == Phone);
        }
        if (SelectedContactType == "Prospect")
        {
            query = query.Where(q => q.Contact_Type_Id == 1);
        }
        else if (SelectedContactType == "Customer")
        {
            query = query.Where(q => q.Contact_Type_Id == 2);
        }
        return query;
    }

Теперь у меня, конечно, может быть метод агента службы с сигнатурой, который выглядит примерно как public EntityList<Contact> SearchContacts(string firstName, string lastName, string phone, ContactType contactType)но представьте, если бы мои поисковые запросы были еще более сложными - этот интерфейс стал бы громоздким.Есть ли лучшая альтернатива, каким-то образом я мог бы построить запрос в ВМ, как я делаю с контекстом домена?Или я должен просто смириться с этим и использовать некоторые объекты параметров?

Я бы очень предпочел иметь возможность создавать запросы на ВМ, потому что в настоящее время у меня есть небольшая иерархия ВМ, которые все выполняют различные поиски, используябазовый класс поиска и шаблонный метод для генерации запросов, вроде

enter image description here

Невозможность генерировать запросы от клиента вызовет много дублирования кода, который я исправил с помощью этогоструктура наследования.

1 Ответ

1 голос
/ 03 марта 2011

Я бы посоветовал изучить шаблон Repository.Это часть DDD, но имеет применение в любой архитектуре, IMO.Его цель - разместить логику запросов.

Кажется грязным давать логику запросов к вашим виртуальным объектам, если только это не единственная цель .

...