征求有关“最佳”模式的反馈/选项/评论,以用于我的服务中的参考数据。
参考数据是什么意思?
让我们以罗斯文为例。订单与数据库中的客户相关。当我实现我的订单服务时,在某些情况下,我希望引用来自订单的“完整”客户,而在其他情况下,我只想引用客户(例如键/值对)。
例如,如果我正在执行 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....
}
这里的想法是,由于在 CustomerDTO 中始终需要 ReferenceInfo(这是一个通用的键/值对),因此我将始终拥有 ReferenceInfo。它为我提供了足够的信息,以便稍后在需要时获取客户详细信息。让 CustomerDTO 需要 ReferenceInfo 的缺点是,当我获得完整的 CustomerDTO(即填写了 CustomerInfo)时,它可能有点过头了,但至少我可以保证参考信息。
是否有一些其他的模式或框架可以用来使这个场景/实现“更干净”?
我问的原因是,虽然我们可以简单地说在 Northwind 中总是返回一个完整的 CustomerDTO,但这在简单的 Northwind 情况下可能工作得很好。就我而言,我有一个具有 25-50 个字段的对象,这些字段是引用/查找类型的数据。在不同的情况下,有些比其他的加载更重要,但我希望这些引用类型的定义尽可能少(这样我就不会陷入“DTO 维护地狱”)。
意见?反馈?注释?
谢谢!