Currently to clone my DTOs I'm implementing IClonable, but this (and the alternatives like a clone ctor) mean that I need to add implementation logic into my (otherwise) data-only object.
Is there a better way to clone DTOs, or is including clone logic considered to be OK?
Such logic is so basic that I think it's stretching it to call it implementation logic. It may simply make much more sense to clone in this way:
Not adding cloning logic into DTOs would to me be an obvious example of following architectural patterns too far.