【问题标题】:Can DTO have basic object level operations like Clone?DTO 可以有像克隆这样的基本对象级操作吗?
【发布时间】:2011-11-08 15:36:42
【问题描述】:

我理解 DTO 的严格定义是作为容器来传输数据,它不应该有任何行为。但是,我遇到了需要克隆 DTO 的情况,有两种选择: 1.在DTO中创建一个Clone方法(ICloneable?) 2. 创建通用实用程序类来克隆 DTO

我目前使用选项 #2。但是,如果 DTO 中没有逻辑,我认为 #1 是可以接受的。我想看看你们中是否有人遇到过类似的 DTO 情况,需要像 Clone、ToString 这样的基本操作,尤其是具有继承的 DTO。谢谢。

【问题讨论】:

    标签: c# dto


    【解决方案1】:

    如果它是一个 DTO,它应该被设计用于序列化 - 在这种情况下,您最好的选择是通过它设计的任何过程对其进行序列化,并从那里重新水化一个克隆。这很少会是性能问题。

    【讨论】:

    • 谢谢 Marc,是的,这正是我所做的,将 DTO 标记为可序列化并使用 BinaryFormatter 进行克隆过程。
    【解决方案2】:

    克隆是一种不太常用的操作。但是,如果您确实需要克隆对象,直接在对象上实现它是完全可以接受的。这将允许您访问与 ICloneable 相关的受保护的 MemberwiseClone 功能

    克隆经常使用 MemberwiseClone 来实现。见Cannot access protected member 'object.MemberwiseClone()'

    如果您需要深度图克隆,请查看 BinaryFormatter 以克隆您的对象。或者考虑改变你的模型,不要期望克隆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-29
      • 2015-08-26
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      相关资源
      最近更新 更多