寻求关于在我的服务中使用“最佳”模式来处理参考数据的反馈、选项和评论。
什么是参考数据?
我们以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....
}
这里的思路是,由于ReferenceInfo(这是一个通用的键/值对)在CustomerDTO中始终是必需的,因此我将始终拥有ReferenceInfo。这为我提供了足够的信息,以后如果需要的话,可以获得客户详细信息。 CustomerDTO要求ReferenceInfo的缺点是,在获取填充了CustomerInfo的完整CustomerDTO时可能有些过度,但至少我可以保证参考信息。有没有其他模式或框架组件可用于使此场景/实现更“清晰”?
我问的原因是,尽管我们可以在Northwind中简单地说始终返回完整的CustomerDTO,但在我的情况下,我有一个具有25-50个字段的对象,这些字段是引用/查找类型的数据。在不同的情况下,一些比其他一些更重要,但我希望尽可能少地定义这些引用类型(这样我就不会陷入“DTO维护地狱”)。
意见?反馈?评论?
谢谢!