我有Order类:
public class Order : IOrder
{
public long Id { get; private set; }
public string Serial { get; private set; }
public long CustomerId { get; set; }
public Order() { }
public IOrderItems GetOrderItems()
{
return new OrderItems(Id);
}
}
我想添加和扩展订单:OrderItems,所以我使用扩展对象模式 - 你可以看到Order有GetOrderItems()。 OrderItems看起来像:
public class OrderItems : IOrderItems
{
public IItem[] Items { get; set; }
public OrderItems(long orderId)
{
Items = Item.GetItems(orderId);
}
}
由于我正在编写Web应用程序,因此我使用的是Web服务。 我的问题是,有时我需要检索Order数据,而不需要使用Items和somwtimes我需要使用它的Items检索Order数据。 检索Order对象没有多大帮助,因为它没有检索到客户端的项目。如果我将GetOrderItems转换为属性 - 我将始终将OrderItems返回给客户端,这不是我想要的。
此外 - 有时客户端会想要调用一个只有Order作为参数的Web服务,有时客户端会想要将Order和Items作为参数调用其他Web服务。
我该如何解决这个问题?
答案 0 :(得分:1)
也许我误解了你的问题,但是你不能只在你的网络服务中提供两种方法来涵盖这两种选择吗?因此,如果我们更改您的Order
类:
public class Order : IOrder
{
public long Id { get; private set; }
public string Serial { get; private set; }
public long CustomerId { get; set; }
public IOrderItems OrderItems { get; set; }
public Order() { }
internal IOrderItems LoadOrderItems()
{
OrderItems = new OrderItems(Id);
}
}
然后,您可以添加一个大致如下的Web服务实现:
public class OrdersService : IOrderService
{
public IOrder LoadOrderOnly(long id)
{
var order = someDataAccessInstance.LoadOrder(id);
return order;
}
public IOrder LoadOrderWithItems(long id)
{
var order = someDataAccessInstance.LoadOrder(id);
order.LoadOrderItems();
return order;
}
}