Я пишу библиотеку Clojure, и мне интересно, как лучше всего настроить параметры конфигурации библиотеки.
Многие библиотеки (например, библиотеки в clojure-contrib) используют параметр глобального уровня, например *buffer-size*
, который пользователь может установить, вызвав для них set!
.Но это не лучший способ для меня, так как он создает глобальное состояние и есть вероятность конфликта имен.
Другой способ - передать параметры в каждом вызове функции, который зависит от них.Если параметров много, тогда вместо передачи отдельных можно использовать их карту.
В качестве примера предположим, что я пишу кеш-библиотеку.
Используя первый подход, у меня есть глобальные параметры, такие как *cache-size*, *expiry-time*, *cache-dir*
и т. Д. Пользователь set!
определяет их (или нет и разрешает им быть по умолчанию) и вызывает такие функции, как (set-in-cache id obj)
и (get-from-cache id)
.
Используя второй подход, пользователь сначала создает карту параметров и передает ее каждому вызову
(def cache-parameters {:cache-size 1000
:expiry-time: 1440
:cache-dir "c:\\cache"})
(set-in-cache cache-parameters id obj)
(get-from-cache cache-parameters id)
Так какой путь является предпочтительным в Clojure и почему?