Yes, I agree that the model changes which suggests changing the transport mappers. But I don't really see the difference between changing the same number of presenters or the same number of pre-presenters.
Perhaps it's more obvious for the both of us if we try and come up with some example.
Say I have a usecase that returns a list of books for sale. This means we do not need all books as they are not all for sale.
Now in this specific UI control we don't need all details of the book. Just the title, price, description and a reference id are enough.
If this was a standalone app with a Swing GUI I could pass the list of book entities to a component implementing a special Swing interface (e.g: ListCellRenderer) for the express purpose of rendering a book for a specific Swing UI component.
As you said.
I do not want to load up the Swing project to update all those renderer classes.
I also don't want just a Swing GUI I want a CLI and REST API as well.
So at the very least we want some kind of construct in between the usecase and whatever UI we want to put on top of it.
Something which transforms the book entity into something that can easily be passed along. I think this is the transport level data structure.
In this case something which consist of only the title, price, description and reference id of the book.
At this point I've basically done what you explained right?
Now what confused me I think.
Is that you can essentially connect the Swing- and CLI UI's from my examples earlier to the REST API and I'd only have to maintain the technology specific mappers for let's say Jackson.
Of course if I wanted to switch to GSON I might run into trouble. But at the same time I'm unlikely to offer both a Jackson and a GSON based REST API at the same time no?
Can I come up with a better reason?
Perhaps I don't want to send JSON over the wire.
Yes, that could reintroduce the problem.
Ok, did I miss something or did I drop down all the way to the usecase now?
Sorry for my rambling,
Sebastian