api-guidelines
api-guidelines copied to clipboard
Extend best-practice list: avoid using static "global mockable state" providers/top-level functions in the favour of injectable ones
It would be nice to recommend avoiding using "global" state in the libraries, that later is almost impossible to test and/or mock.
We tend to favor explicitly spelled-out APIs for the such state: datetime's Clock.System.now()
, Okio's FileSystem.DEFAULT.read*
as opposed to top-level now()
, read(path)
etc. (the most notable existing API that falls into this trap is coroutine's Dispatchers.Default
)