A common topic of discussion lately is when and how to implement DTO's for your domain objects. Most everyone seems to come to a point where they get sick of writing tons of classes just for their DTO's.
Before I continue, I want to point out that this approach has little to offer to those of you that choose to implement your domain objects with a public parameterless constructor and non-validated getter/setter functionality, even for non-trivial domain objects. I am tempted to implement my domain objects in this way and use a validation service, but it has been pointed out to me that there is no way to ensure others are using validation properly to verifty the integrity of instances of your domain objects. This leads me to believe we should be enforcing integrity on the domain object as a whole in the way we create and update instances of them.
Consider the following interface for your domain object: