My stance is that mappers, not data sources, should be swappable.  With this line of thinking, complex queries are done in the mapper instead of on it.  Your mappers end up looking like

````ruby
ArticleMapper.find_with_commenter commenter
````

instead of

````ruby
ArticleMapper.select { |article| article.comments.include? commenter }
````

This makes it easier to reuse persistence querying logic as well as make the intent clearer.

The added benefit of this approach as well is that we could add a bunch of adapters quickly. Later, we can refactor code duplication out of the adapters as we see them instead of trying to figure them out now.