【问题标题】:Do I need to split a large DTO?我需要拆分大型 DTO 吗?
【发布时间】:2014-07-17 10:21:14
【问题描述】:

我有一个具有 30 个属性的 DTO,会添加一些属性。 许多其他类使用这个 DTO,一些类使用 10 到 20 个属性,一些其他类使用全部 30 个属性。

在一个类中,我可以创建一个使用 10 个属性而其余 20 个属性为空的 DTO 吗?

在这种情况下,通过继承或其他方式将 DTO 拆分为 2-3 个 DTO 是否是一种好方法?

【问题讨论】:

  • 顺便说一句,我看到您是 Stack Overflow 的新手,并且已经问了一些问题。欢迎来到本站。如果您认为某个答案完全且令人满意地涵盖了您的问题,则习惯性地“接受”它和/或对其进行投票,以奖励提供有用答案的人。

标签: class inheritance dto ooad


【解决方案1】:

自然不愿意考虑具有 30 个属性的单个 DTO,但这绝不是一个“错误”的选择。想想一个有很多“标签”的照片文件:相机类型、镜头类型、光圈、模式、尺寸等。这些标签有几十个,将它们全部放在 PhotoDto 中是完全可以的。

只有在有充分的实际设计理由时才拆分您的 DTO。大小不够,拆分可能会带来不同的困难。

编辑:考虑下游使用也会有所帮助,例如如果 DTO 的所有属性都保存在单个 DB 表中,那么保留该 1 个 DTO -> 1 个 DB 表结构在概念上和实际意义上(ORM 配置等)都是有利的。

【讨论】:

  • 感谢您的快速回复。在一个类中,我可以创建一个使用 10 个属性的 DTO,以便其余 20 个属性为空吗?
  • 当然。只要您的属性在概念上属于单个类,就可以了。这样做当然不会有任何技术障碍。但是,尽管我向您保证这样做是可以的,但请仔细听我的警告,例如不要做诸如在单个 FormDataDto 中处理所有网站表单之类的事情 :-)
  • 考虑注册/更新用户配置文件的案例。在我的数据库中,3 个表包含用户的详细信息,如 SIGN_ON、PROFILE、ADDRESS。当一个新用户注册时,我需要将数据插入到这 3 个表中。我可以为此创建一个 DTO 还是为每个表创建 3 个 DTO?如果需要,我只需要更新地址或个人资料。为此需要多少个 DTO?
  • 通常,Stack Overflow 鼓励一次一个问题,而不是在 cmets 中提出新问题。在这种情况下,我倾向于将我的 DTO 与 DB 对齐:一个 User 对象,它可能包含 3 个子类型,Profile、SignOn 和 Address
  • 但请注意,这不是对与错,而是一种风格和判断选择。通常在编码中,您只能通过尝试其他方法来了解什么是“最好的”。尝试找出什么是最好的,但花时间尝试自己的想法,看看为什么认为它们是好是坏,这对你有好处
猜你喜欢
  • 2020-11-24
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多