Hiding implementation details from the user makes your UI model easier to understand. But it creates a different problem: whenever some of the hidden implementation details leak to the user, it will not match his mental model of how your product behaves.
Going back to the earlier example of somebody buying a movie, let’s say that same person now wants to buy a movie for her sister. Her mental model of buying a movie as a gift is simple:
Go to a store.
Browse through a number of movies until she finds one her sister likes.
Exchange money for a DVD.
Wrap the DVD in nice wrapping paper.
Deliver the wrapped DVD to her sister.
When it comes to buying a movie for her sister online, this user’s mental model breaks down. The UI model ...