我理解DTO的严格定义是作为传输数据的容器,它不应该有任何行为。但是,我遇到了需要克隆DTO的情况,有两种选择: 1.在DTO中创建一个克隆方法(ICloneable?) 2.创建通用实用程序类来克隆DTO
我目前使用选项#2。但是,如果DTO中没有逻辑,我认为#1是可以接受的。我想看看你们中是否有人遇到类似DTO的情况需要像Clone,ToString这样的基本操作,尤其是具有继承性的DTO。感谢。
答案 0 :(得分:3)
如果它是DTO,它应该被设计用于序列化 - 在这种情况下,您最好的选择是通过它设计的任何过程来序列化它,并从那里重新补充克隆。这很难成为性能问题。
答案 1 :(得分:2)
克隆是一种不常用的操作。但是,如果您确实需要克隆对象,则直接在对象上实现它是完全可以接受的。这样,您就可以访问与MemberwiseClone
ICloneable
功能
经常使用MemberwiseClone实现克隆。请参阅Cannot access protected member 'object.MemberwiseClone()'。
如果您需要深度图克隆,请查看BinaryFormatter以克隆您的对象。或者考虑更改模型以避免克隆。