如何解决根据调用者的不同,传递方法以获取对象的不同属性的参数是什么?方法签名和实现
提出问题前的一些架构介绍
我有很多 WCF 服务; ServiceLargeObject、ServiceA、ServiceB、ServiceC、...、ServiceZ。
我有一个 WCF 合同,描述了每个服务都可以以 NuGet 包的形式访问的大对象。所有服务都同意大对象的外观。
大对象有许多不同类型的属性:
class LargeObject {
public int Prop1 { get; set; }
public string Prop2 { get; set; }
public bool Prop3 { get; set; }
public CustomProp Prop4 { get; set; }
public List<OtherCustomProp> Prop5 { get; set; }
...
public decimal Prop25 { get; set; }
}
ServiceLargeObject 负责大对象的 CRUD 操作。如果其他服务想对一个LargeObject做一些事情,他们会调用ServiceLargeObject来操作。
比如说ServiceA想要更新一个LargeObject的Prop1。它通过对象的唯一标识符(道具之一的值)向 ServiceLargeObject 询问对象,获取对象,更改 Prop1 的值,并告诉 ServiceLargeObject 更新并保存更新后的 LargeObject。
ServiceLargeObject 接收来自 ServiceA 的更新数据,将 LargeObject 转换为 MiddleLayerLargeObject,并传递给中间层。
中间层对 MiddleLayerLargeObject 执行逻辑。
为了最终执行 CRUD 操作,MiddleLayerLargeObject 再次转换为 FinalLayerLargeObject 并发送到负责与 DB 对话的最后一层。
问题
大多数服务很少需要来自 LargeObject 的多个道具。他们总是得到完整的大对象,这是发送数据的巨大浪费。它们是 ServiceLargeObject 上的一些专门的服务方法,它们只会获取请求服务的某些数据。之所以实施这些,是因为经常需要这些数据。然而,在大多数情况下,可能发生的最好的事情是,如果服务可以简单地从 LargeObject 请求他们想要的 props,并且只得到那些。
我正在寻找的是实现这一目标的解决方案。该方法看起来如何?它的签名是什么?它的实现是什么? 澄清一下,这是关于获取数据。阅读。如果可以解决这个问题,我也会对更新数据非常感兴趣,但那是另一个时间。
示例: ServiceB 需要来自 LargeObject 的 Prop3、Prop5 和 Prop20 ServiceK 需要 Prop1 和 Prop25。 SerivceQ 需要 Prop2、Prop13、Prop14、Prop16、Prop19。 ...等所有服务。不同的服务,不同的道具。 一种方法
类似: 公共 XXXXX GetJustTheRequestedLargeObjectProperties(YYYYY 参数)
但是有一些限制。
约束
- 大对象不会改变。它将保持为 LargeObject。
- 可以添加另一种服务方法来取代旧的服务方法。这就是我想要的。
- 可以添加中间层对象和最终层对象。可以有更多与 DB 对话的方法。
- 如果LargeObject 保持向后兼容,我认为可以向LargeObject 添加属性。 IE。未获得更新合同的服务仍可使用 ServiceLargeObject。
- 返回值看起来如何并不重要,只要我知道返回了哪些值。 IE。因为我可以期待某些道具,所以它们是否作为可预测的集合、匿名对象或其他东西出现都没有关系。
- 最好没有反射(不确定是否可以解决)
- 最好不要使用枚举,因为随着时间的推移,它们往往会在 WCF 合同中产生向后兼容性问题。
我知道这非常抽象且未指明,但我希望您可能对方法甚至解决方案有想法。也许属性是解决方案。也许表达。找了很久都没有找到好的解决方案。
谢谢,抱歉阅读太长了!
附注。如果您有关于按属性更新 LargeObject(而不是每次都更新整个对象)的想法,那也将不胜感激。但这是一个奖励。再次感谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。