At least for libdnf5, BaseMaker is the only code that does not involve monkeypatching. It'd be nice to split each backend's implementation into a separate module so it can be accessed without affecting global state.
__init__.py
with function to get BaseMaker impl__init__.py
with re-exported BaseMaker