- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们在我们的 WCF 服务接口(interface)中使用 Dtos,但是当 Dto 代表的业务对象实现多个接口(interface)并且我们希望在这些不同的上下文中返回 Dtos 并且还能够在客户端以多态方式处理 Dto。
例如,假设我们有一个 IBusinessObject
的接口(interface)有几个属性包含对象关系的详细信息,对象的属性等。我有这个的几个实现是LinearBusinessObject
哪个实现IBusinessObject
和 ILinear
. ILinear
还有其他实现这也不是业务对象,只是简单的线性事物。
我们的服务有一个获取业务对象的方法。这将返回一个基 Dto 类 ( BusinessObjectDto
),它声明了 IBusinessObject
的公共(public)部分。 (关系属性等)和 LinearBusinessObjectDto
延伸 BusinessObjectDto
并添加有关事物线性方面的额外信息。这很好,使客户端能够处理返回的 BusinessObjects
具有一定程度的多态性。
我们还想要一个获取线性对象的方法。这将返回一个基类 LinearDto
其中包含常见的线性细节。简单的线性对象实现扩展 LinearDto
一切都很好。但是现在我有一个问题,因为我不能拥有我的 LinearBusinessObjectDto
从 LinearDto
延伸和 BusinessObjectDto
因为只支持单一继承,而且我不能使用接口(interface),因为 WCF 不知道然后将什么类型放入 WDSL 的服务契约定义中。
所以我开始为我的 LinearBusinessObject
设置 2 个 dto , 一个派生自 BusinessObjectDto
( LinearBusinessObjectAsBusinessObjectDto
) 和派生自 LinearDto 的一个 ( LinearBusinessObjectAsLinearDto
),然后根据我感兴趣的接口(interface)转换每一个。
这似乎会产生许多额外的 Dto 类(我已经有很多),所以我想知道是否有比这更好的解决方案?或者这只是我们必须忍受的东西?
最佳答案
一位智者曾经告诉我,面向对象是服务的敌人。
在我看来,这是一个普遍的 OO/SOA 问题,而不是一个特定的 WCF 问题:我想到了“优先考虑继承优先于组合”的老建议。特别是在服务方面,多态设计不应该是您在 DTO 层中所追求的。您应该避免使用使用继承或接口(interface)的 DTO(除非您动态序列化/反序列化,否则接口(interface)甚至是不可能的......您不能使用 SVCUtil 生成具体代理,因为具体类型在生成时未知,但从我内存 这在您的 .NET 客户端中使用 ChannelFactories 时是可能的...不过我不记得细节了)。
通常,当您创建 DTO/DataContracts 时,只在其中定义具体的成员/属性。您的 DTO 模型应该设计为扁平的和跨平台的,而不是面向对象的。
关于c# - 如何处理实现多个接口(interface)的对象的 Dtos?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599079/
嘿,在下面的代码中,我在此列表中存储了几个 SQL 行。然而,当我打印它时,它显示的唯一内容是指针。如何让它打印出数据行,以便我可以检查是否获得了正确的信息。谢谢大家! List list = un
假设我有具有以下字段的 PostDTO: private Long id; private ShortInfoUserDTO author; private CategoryDTO category;
我们在我们的 WCF 服务接口(interface)中使用 Dtos,但是当 Dto 代表的业务对象实现多个接口(interface)并且我们希望在这些不同的上下文中返回 Dtos 并且还能够在客户端
NestJS文档展示了如何添加DTO,以便在控制器中使用类验证器包来验证请求对象。描述的DTO有打字脚本类。现在,控制器处理DTO(TS类),而NestJS提供程序(或服务)则使用类型脚本接口。这些D
我开始使用 ArangoDB 作为现有 java SpringBoot(和 SpringData)应用程序的持久层。DTO 有很多,它们都是不可变的类(使用 AutoValue)。 因此,没有默认构造
我正在学习 ASP.NET 存储库模式。我做了一些研究,但找不到正确的答案。 我的 DAL 上有一个数据库实体 Employee,它有许多列。 我有 EmployeeRepository 负责使用 D
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我正在开发一个项目,该项目使用汇编器模式将 LinqToEntity 实体组装成服务级别的数据传输对象,然后将其传递到客户端层以供使用。该方法是将实体对象转换为简化的平面对象,提供特定于服务调用的信息
我有一个 nodejs REST API 后端运行 nestjs 框架,使用 typeORM 作为我实体的 ORM . 来自 C#/Entity Framework 背景,我非常习惯将我的 Dto 映
我认为最好开始描述我正在做的事情,并在最后将其汇总起来解决大问题: 我正在使用 Google 的 GWT 构建一个网络应用程序,并封装某些代码以便在我开发移动客户端时可重用。到目前为止,我有以下项目:
我正在使用 Flink,并且有一个 JSON 字符串流到达我的系统,其中包含动态更改的字段和嵌套字段。所以我不能模拟这个传入的 JSON 并将其转换为静态 POJO,我必须依赖于 Map。 我的第一个
LINQ to SQL 非常棒,但在某些情况下会适得其反。对于我的案例,它适得其反。 我有一个 StudentServiceDm,它映射到一个包含 40 个字段的 StudentService 表。我
我的 spring-boot 项目需要一个用户管理服务。我对spring中DTO(Data transfer object)的使用大体了解。但是当我考虑设计服务时,我只为一个“用户”模型使用多个 DT
我是一名优秀的程序员,十分优秀!