Expanded Answer:
Let's try analyze this situation, without blindly saying that no one do such a thing.
DTO - it's structures that contain only data and transfer it between boundries.
Domain Model - the key word here is 'Model' is an abstraction of you domain that solve it's problems. From an OO view it's simple class, if you break it apart it would be pure data (DTO), and pure stateless behavior (Service or Domain Service in DDD terms).
Now let's take for example MVVM pattern, particularly it's VM part. View Model - the key word here is again 'Model' is an abstraction of view that solve it's problems. There are lot's of way people implement it, some wrap Domain Objects, some do conversion, some wrap DTO's. The point here is that View Model is a Domain Model of the view, it's pretty much the same as any Model. Then why do people restrict there way to implement Domain Model.
Now back to DTO and Domain Model. As I said above we can break down Domain Object to DTO and Service. Let's consider we think of Domain object as a behavioral wrapper around DTO (like MVVM often does). Where it lead's us:
- First we break OO encapsulations. This is bad because because it prevents our object data from incorrect usage. Someone could take our Domain object data (DTO) manipulate it directly and put our Model in invalid state. This is huge.
- We can easily transfer our object throw boundaries, web services, serialization, cloning, we can detach out data part, and give it to our data storage or web service. This is huge for distributed systems.
Let's continue, breaking encapsulation is a serious problem. What we need is a way to guarantee that our Domain Object data will not be manipulated directly, only Domain Object should manipulate it. We can achieve this by making DTO immutable, read only object, when it's outside of Domain Object.
Now about reusing DTO, Inheritance vs Composition. Someone said: prefer composition over inheritance, and i personally do follow this rule. But you need to analyse your particular situations. The rule say 'prefer' not obey.
Original Asnwer:
Though I didn't personally seen such approach too often, I think this method is underestimated and it could be potentially very good.
I seen such questions asked many times, and all the answers were, do not do this because nobody do such things. Do not be afraid to experiment.
Ryan Bennet wrote in his answer:
It might be easy now, but it may be a maintanence nightmare in the
future.
Well it's true, but what if there will be no future or it's small project, I would stick to YAGNI, TDD and Agile rules here, and do minimal work that does the job.
Code isn't something you engrave in stone and never touch, when you need you can refactor, and introduce DTO, use auto-mapper or whatever.