如何处理实现多个接口的对象的Dtos?

2023-12-27

我们在 WCF 服务接口中使用 Dtos,但当 Dto 表示的业务对象实现多个接口时,我们开始遇到问题,并且我们希望在这些不同的上下文中返回 Dtos,并且还能够处理Dtos 在客户端上是多态的。

例如,假设我们有一个接口IBusinessObject有几个属性,其中包含对象关系的详细信息、对象的属性等。我有几个实现,这是一个LinearBusinessObject哪个实施IBusinessObject and ILinear。还有其他的实现ILinear它们也不是业务对象,只是简单的线性事物。

我们的服务有一个获取业务对象的方法。这将返回一个基 Dto 类 (BusinessObjectDto) 声明了 a 的公共部分IBusinessObject(关系属性等)和LinearBusinessObjectDto这延伸了BusinessObjectDto并添加有关事物线性方面的额外信息。这很好,并且使客户端能够处理返回的BusinessObjects具有一定程度的多态性。

我们还想要一个获得线性事物的方法。这将返回一个基类LinearDto其中包含常见的线性细节。简单的线性对象实现扩展LinearDto一切都很好。但现在我有一个问题,因为我不能拥有我的LinearBusinessObjectDto从两者延伸LinearDto和和BusinessObjectDto因为仅支持单一继承,并且我无法使用接口,因为 WCF 不知道要在 WDSL 中的服务契约定义中放入什么类型。

所以我开始为我的 2 个 dtosLinearBusinessObject,一个源自BusinessObjectDto (LinearBusinessObjectAsBusinessObjectDto) 和一个派生自 LinearDto (LinearBusinessObjectAsLinearDto),然后根据我感兴趣的界面转换每一个。

这似乎会导致许多额外的 Dto 类(我已经有很多),所以我想知道是否有比这更好的解决方案?或者这只是我们必须忍受的事情?


一位智者曾经告诉我,面向对象是服务的敌人。

在我看来,这是一个一般的 OO/SOA 问题,而不是一个特定的 WCF 问题:我想起了“优先考虑组合而不是继承”的旧建议。特别是当涉及到服务时,多态设计不应该是您在 DTO 层中所追求的。您应该避免使用使用继承或接口的 DTO(并且接口甚至是不可能的,除非您动态序列化/反序列化...您无法使用 SVCUtil 生成具体代理,因为具体类型在生成时未知,但从我的内存,在 .NET 客户端中使用 ChannelFactories 时这是可能的......但我不记得细节了)。

一般来说,当您创建 DTO/DataContracts 时,仅在其中定义具体的成员/属性。您的 DTO 模型应该设计为扁平且跨平台的,而不是面向对象的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理实现多个接口的对象的Dtos? 的相关文章

  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • IIS 7.5 托管的 WCF 服务仅针对大型请求抛出 EndpointNotFoundException 和 404

    我有一个 WCF REST 服务托管在 IIS 7 5 Windows 2008 R2 上 该服务按预期工作 除非客户端尝试发送大于 25 MB 的消息 具体来说 当发送大小约为 25 MB 的消息时 服务会正确接收并处理消息 而当发送大小
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Android:使用媒体播放器播放本地视频

    我正在尝试播放我在项目中保存的视频 我有下载this http camendesign co uk code video for everybody test html 一个 mp4 测试视频 然后在我的项目中创建了一个名为 vid 的文件
  • Cordova - 命令错误代码 1 |命令失败的时间为

    我是科尔多瓦的新手 所以如果我的问题不相关 请原谅我 我的 Windows 7 x64 机器中有一个 cordova 项目 昨天我通过构建我的科尔多瓦应用程序cordova build android release 但我需要添加新插件co
  • 创建直方图 OCaml

    我的任务是创建一个直方图 输出某个元素在列表中出现的次数 Input 2 2 2 3 4 4 1 Output 2 3 2 2 2 1 3 1 4 2 4 1 1 1 Expected output 2 3 3 1 4 2 1 1 My c
  • YARN 中应用程序管理器和应用程序主控之间的区别?

    我了解 MRv1 的工作原理 现在我试图了解 MRv2 YARN 中的应用程序管理器和应用程序主控之间有什么区别 应用程序主控和应用程序管理器这两个术语通常可以互换使用 实际上 Application Master 是请求 启动和监视应用程
  • 使用 moment.js 将日期转换为字符串“MM/dd/yyyy”

    我需要从 jquery datepicker 中获取日期值 将其转换为字符串格式 MM dd yyyy 以便它可以执行正确的 ajax post 当页面加载或更改日期选择器时 将进行 jquery ajax 调用 我有这个代码 var sT
  • 以编程方式在 WSO2 API Manager 中添加自定义处理程序

    我通过使用 WSO2 API Manager 的自动化流程创建和订阅新的 API出版商 https docs wso2 com display AM190 Publisher APIs and Store https docs wso2 c
  • 识别与给定字符串向量匹配的列索引

    我有一个字符串向量 x lt c a b 我有一个多列矩阵 其中包含该字符串向量中的名称 我想获取与其名称匹配的列号 索引 which colnames sample matrix x 当 x 不是向量而是单个元素时 上面的方法有效 有什么
  • 长整数中单个位的索引(在C中)[重复]

    这个问题在这里已经有答案了 我试图找到一个最佳代码来定位长整数 64 位 中的单个位索引 长整数只有一位设置位 使用C语言 目前 我只是将整个事情移动一位 然后检查零 我读过有关查找表的内容 但它不适用于整个 64 位 我考虑过检查每个 8
  • 将回调方法实现转换为 akka 流源

    我正在与我无法控制的 java 库中的数据发布者合作 发布者库使用典型的回调设置 库代码中的某处 该库是java的 但为了简洁起见 我将在scala中进行描述 type DataType trait DataConsumer def onD
  • 从 AppDelegate 重新加载 tableView

    我有一个非常简单的问题 但我仍在寻找可可的方法 我有一个在 Xcode 中创建的普通 rootViewController 应用程序 在 AppDelegate 中 我有一个更新数据库的函数 当运行时收到推送消息时 didReceiveRe
  • exp init 项目 [11:31:26] zlib:文件意外结束

    当我跑步时exp init Locations它给了我这个错误 npm 6 1 0 exp 55 04 正如 Mandan 所描述的 您还可以导航至 userprofile expo starter app cache文件夹删除blank
  • 如何对占数据 50% 的条形进行着色?

    我正在为一些数据点绘制直方图 其中条形高度是该数据点占整个数据的百分比 x normal size 1000 hist bins np histogram x bins 20 plt bar bins 1 hist astype np fl
  • 从 MS-SQL Server 2008 中的 XML 字段提取值

    我试图从存储在单个 XML 字段中的 MS SQL Server 2008 数据库中提取四条信息 这是我第一次使用 XML 所以我遇到了一些麻烦 这就是为什么我只有要提取的数据 我尝试过使用其他帖子来解决我的问题 但显然没有运气 这四个信息
  • Fiddler 未捕获来自 .Net Core 的流量

    我有一个控制台应用程序 它通过 HTTP HTTPS 调用许多第三方服务 这些服务最初是为在 Net Framework 下运行而编写的 Fiddler 与该版本的应用程序配合良好 捕获所有 HTTP 和 HTTPS 流量 我将应用程序移植
  • Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer

    我正在运行你好世界 http www mkyong com webservices jax rs jersey hello world example 例子 不过我用的是2 7版本 在 maven pom xml 我有
  • 将 symfony 与 postgresql 结合使用

    我正在尝试使用 Symfony 和 PostgreSQL 创建一个网站 我找不到任何说明如何执行此操作的文档 所有文档都假设后端数据库是 mySQL 有人知道该怎么做吗 如果您使用 Doctrine 只需在您的databases yml 中
  • 检测和重定向 SNI 支持的浏览器的最有效代码是什么?

    说吧 我有一个网站mywebsite com 使用 Apache Httpd 托管 现在我想要的是 每当任何用户输入mywebsite com or www mywebsite com如果浏览器支持 SNI 那么它应该重定向到https w
  • 如何检测 32 位 int 的整数溢出?

    我知道这个话题已经被问过好几次了 但是我的问题是关于完整 32 位 int 的溢出 例如 11111111111111111111111111111111 00000000000000000000000000000001 000000000
  • 如何实现仅输入表情符号键盘?

    我想实现自定义条目 Xamarin forms 当用户将焦点放在条目上时 设备将显示表情符号键盘 简短回答 不幸的是 由于 Android 和 iOS 平台的限制 如果不创建自己的键盘是不可能的 长答案 Default behaviour
  • 如何处理实现多个接口的对象的Dtos?

    我们在 WCF 服务接口中使用 Dtos 但当 Dto 表示的业务对象实现多个接口时 我们开始遇到问题 并且我们希望在这些不同的上下文中返回 Dtos 并且还能够处理Dtos 在客户端上是多态的 例如 假设我们有一个接口IBusinessO