@Caio
After thinking a bit more about it, it might not be a good idea to pass out the DTO as is, because if someone changes anything on it, those changes are propagated straight back to the Entity, essentially circumventing its (application independent) business rules. So perhaps passing out a deep copy of the DTO would be in order.
@Julian
The DTO would contain all the information of the entity. And that would get filtered out by the presenter, as you said.
It would just mean you would have to create yet another DTO for that. Which could be a pain.
So here is my compromise proposal:
Entity should not return DTOs. The Interactor would create (or have a factory create) a DTO appropriate for the use case in question. This DTO will be populated with the minimum amount of information required by the use case. The presenter would create a structure for the view using this minimal DTO that contains any additional UI info needed by the view. So there will be 1 DTO / use case.
For example (shopping app):
I have an Item entity with all sorts of fields.
The lisItems interactor gets the list of items and creates an array of DisplayItems. Each DisplayItem data structure contains only the information that is necessary to identify and/or display an item (itemId, name, price). The interactor passes this array of DisplayItems to the presenter.
The presenter creates an array of Sections. Each section object contains information like header title, color, and a list of DisplayItems that need to be displayed in each tableView section. It passes this array to the view.
The view just updates itself based on this information.
What say ye?