根据调用者的不同,传递方法以获取对象的不同属性的参数是什么?方法签名和实现

如何解决根据调用者的不同,传递方法以获取对象的不同属性的参数是什么?方法签名和实现

提出问题前的一些架构介绍

我有很多 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 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res