WCF数据合同和参考实体数据?

Bri*_*ian 12 wcf soa design-patterns datacontract

征求关于"最佳"模式的反馈/选项/评论,以用于我的服务中的参考数据.

参考数据是什么意思?

我们以Northwind为例.订单与数据库中的客户相关.当我实现我的订单服务时,在某些情况下,当我只想要一个对客户的引用(例如一个键/值对)时,我会希望引用来自订单的"完整"客户和其他情况.

例如,如果我正在使用GetAllOrders(),我不想返回完全填写的订单,我想要返回订单的轻量版本,其中只包含每个订单的客户的参考数据.但是,如果我使用GetOrder()方法,我可能想填写客户详细信息,因为很可能需要此方法的消费者.可能还有其他情况我可能要求在某些方法调用期间填写客户详细信息,但留给其他人使用.

这是我提出的:

[DataContract]
public OrderDTO
{
    [DataMember(Required)]
    public CustomerDTO;

    //etc..
}

[DataContract]
public CustomerDTO
{
    [DataMember(Required)]
    public ReferenceInfo ReferenceInfo;

    [DataMember(Optional)]
    public CustomerInfo CustomerInfo;
}

[DataContract]
public ReferenceInfo
{
    [DataMember(Required)]
    public string Key;

    [DataMember(Required)]
    public string Value;
}

[DataContract]
public CustomerInfo 
{
    [DataMember(Required)]
    public string CustomerID;

    [DataMember(Required)]
    public string Name;

    //etc....
}
Run Code Online (Sandbox Code Playgroud)

这里的想法是,因为在CustomerDTO中总是需要ReferenceInfo(它是一个通用的Key/Value对),所以我总是有ReferenceInfo.如果需要,它可以为我提供足够的信息以获取客户详细信息.让CustomerDTO需要ReferenceInfo的缺点是,当我获得完整的CustomerDTO(即填写了CustomerInfo)时,它可能有点过分,但至少我保证参考信息.

我可以使用其他一些模式或框架来使这个场景/实现"更清洁"吗?

我问的原因是,虽然我们可以简单地说在Northwind中总是返回一个完整的CustomerDTO,但这可能在简单的Northwind情况下工作正常.在我的例子中,我有一个对象,有25-50个字段是引用/查找类型数据.有些在不同的情况下加载比其他更重要,但我希望尽可能少地定义这些引用类型(这样我就不会进入"DTO维护地狱").

意见?反馈?评论?

谢谢!

sip*_*wiz 1

对我来说这似乎是一个复杂的解决方案。为什么不在 OrderDTO 类中只包含一个客户 id 字段,然后让应用程序在运行时决定是否需要客户数据。由于它具有客户 ID,因此可以在决定时提取数据。