如何处理实现多个接口的对象的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? 的相关文章

  • 在现代 C++ 中,临时生命周期延长何时有用?

    在 C 中 您可以将函数的返回值 返回值 而不是引用 绑定到 const 引用 并且代码仍然有效 因为该临时对象的生命周期将延长到作用域末尾 例如 std string get string return abc void f const
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 如何使用 SOAP 且不使用 WSE 在 .NET 中签署 Amazon Web 服务请求

    亚马逊产品广告 API 以前称为 Amazon Associates Web Service 或 Amazon AWS 实施了一项新规则 即自 2009 年 8 月 15 日起 向其发送的所有 Web 服务请求都必须经过签名 他们在其网站上
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 使用具有抗锯齿功能的 C# 更改抗锯齿图像的背景颜色

    我有一个图像需要更改背景颜色 例如 将下面示例图像的背景更改为蓝色 然而 图像是抗锯齿的 所以我不能简单地用不同的颜色替换背景颜色 我尝试过的一种方法是创建第二个图像 仅作为背景 并更改其颜色并将两个图像合并为一个图像 但是这不起作用 因为
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan
  • 结构化绑定的用例有哪些?

    C 17 标准引入了新的结构化绑定 http en cppreference com w cpp language structured binding功能 最初是proposed http www open std org jtc1 sc
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 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