WCF - как я могу определить сервисы более объектно-ориентированным способом? - PullRequest
1 голос
/ 26 марта 2012

Каков наилучший способ доступа к модели удаленного объекта через WCF?

У меня есть один системный уровень (A) с объектно-ориентированной моделью, и я хочу получить доступ к этой модели из другого уровня (B)

Требуемые объекты должны быть загружены по требованию B.В качестве примера предположим, что у меня есть классы C1 и C2, где C1 содержит список C2.Этот список следует загружать только при обращении к нему.

Поскольку контракты на данные не могут содержать контракты на операции, я бы реализовал это с одним контрактом на обслуживание с двумя методами "getC1" и "getListC2 (C1)"

Но на самом деле я хочу получить доступ к объектно-ориентированной модели, например, вызвать функцию в C1: C1.getListC2

Как я могу работать с WCF более объектно-ориентированным способом?

1 Ответ

3 голосов
/ 26 марта 2012

Один из способов добиться этого - обернуть прокси-объекты своей собственной ленивой загрузкой (и другой) бизнес-логикой. Другими словами, допустим, у вас есть прокси WCF с именем Order и сервисный метод GetOrderLineItems ().

public class Order
{
    private Proxies.Order _order;
    private List<OrderLineItem> _lineItems;

    public string Name 
    {
        get { return _order.Name; }
    }

    public List<OrderLineItem> LineItems
    { 
        if (_lineItems == null)
        {
             _lineItems = //Make the service call to get these objects
        }
    }
}

Другой способ синтезировать это - добавить методы расширения к вашим прокси-объектам:

public static List<Proxies.OrderLineItem> GetLineItems(this Proxies.Order order)
{
     //Make the service call to get the line items
}

Что позволит вам сделать:

var lineItems = order.GetLineItems();
...