Считаю это вполне так нормой, и что-то похожее сам практикую. Что-то похожее на
https://github.com/kentcdodds/bookshelf/ (подход YourServiceNameProvider + useYourServiceName, чтобы инкапсулировать логику), но чуток иначе.
Организовать доменный/сервисный слой на ооп, что потом весьма проще мокать и тестить, по сравнению с замыканиями.
А на хуках + контексте уже "инфраструктурный" слой, ака контейнеры.