I wouldn't say that callers implement the `RefineableView` interface. That's done by the `Dataset` and `View` implementations. The interface actually just carries a set of methods for expressing constraints and requires that they can be chained together (because calling these methods on a `RefineableView` returns another `RefineableView`).

I'd like to talk more about the intent of the views API. I've sent you an invite to look at the design proposal, which has some discussion on it.