I am in the middle of starting up a new project and just wanted some reassurance as to which approach to DTO's returned by the read-side was easier to maintain in a real world application with reasonable complexity.
I realize with a DTO per query, it would allow for a specific query's response to diverge from the others more easily in the future. However, common properties between that query and other queries would require changes in multiple places (e.g. the same resource could have multiple queries in the form of GetById, GetAll, GetByStatus, GetBySomethingElse, etc.) and there is more repetition.
If a DTO is created per representation of a resource, a GetById might return a DetailedDto with many properties, while a GetAll might return a SummarizedDto with fewer properties. This would require less changes for common properties and diverging queries would just require a new version of the DTO to be created. The biggest disadvantage to this approach is that I'm terrible at naming classes and coming up with words, so "Detailed" + "Summarized" is the extent of my imagination.
I'm leaning towards refactoring my first attempt at writing this application from using the "DTO per query" to the "DTO per representation" approach. Are there any benefits to sticking with the "DTO per query" or is "DTO per representation" a good way to go?