The Encoding enum acts as a factory for column encoders and decoders.
I'm not sure how and why you would want to decouple them.
The idea of dictionary encoding is that the upper layer can iterate on the ids instead of the values for performance reasons (aggregations, filters and joins for example)
So we don't want to abstract it out on purpose.