如何为此方案设计DTO?

时间:2015-11-17 18:04:14

标签: c# design-patterns dto

我有以下情况:

用户对象

  • 结构的一半数据存储在数据库中(由我拥有)。
  • 其他一半数据来自第三方(通过网络API)。
  • 另一个重要的一点是,我想使用ExpressMapper(或任何其他好的建议)将实体/服务对象映射到DTO。

我想使用DTO模式在不同层之间传输用户信息。

问题:

  1. 我是否应该制作一个包含服务对象和数据库对象的所有属性的大型DTO?

  2. 我应该创建第三方数据对象作为DTO的属性。我的意思是隐藏接口后面的服务数据对象,并将该接口作为DTO的属性。

  3. 我是否需要在案例1或2中为DTO创建接口?

1 个答案:

答案 0 :(得分:3)

通常,最好的DTO设计与客户端的要求以及返回它的方法/功能有关。我假设你为了序列化结果而这样做。

如果您只是简单地将您要存储的所有数据映射到DTO,那么您实际上并没有获得太多收益,并且可能只是发出您已存储的数据对象序列化的方式。

所以回答你的问题

1)否。您应该使用与您正在进行的通话相关的数据制作DTO,原因有几个。

  • DTO通常以串行方式通过电线传输。所以 较小=数据较少。
  • 填充和序列化DTO可能会产生开销。你没有 想惩罚每一个返回大型DTO的电话 繁琐的过程只是为了填充一个与之无关的财产 电话的目的。
  • 可能会更自我记录。

请注意,发送一些"无关紧要的"用于代码重用的数据位。请注意数据的数量以及生成数据所需的工作量。在可读性和效率方面,没有比这更有意义的规则了。

2)取决于您的申请,但我倾向于说知道它的第三方数据通常与主叫客户获取DTO。您从中获取数据的第三方也可以从第三方获取。但他们回到你身边的DTO可能不会为你挑出那些数据。

3)接口,再次与你正在开发的应用程序有关。从客户的角度来看,除非您在程序集中提供DTO库,否则任何界面都不会有太大意义。如果DTO是由代理生成的(例如添加服务引用),或者客户端正在创建自己的DTO客户端版本,那么这些接口将不会传递给客户端。 / p>