Size: a a a

Clojure — русскоговорящее сообщество

2021 November 09

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
О, интересно!
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
(def foo 10)                   

(identity foo)
;;Execution time mean : 2,052164 ns

(def ^:dynamic bar 10)

(identity bar)
;;Execution time mean : 5,846803 ns

(binding [bar 20]
 (identity bar))
;;Execution time mean : 454,296756 ns
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
у меня это выглядит примерно так https://github.com/serioga/webapp-clojure-2020/blob/master/src/app/database/core.clj
при этом data source поднимается через integrant
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
integrant.repl именно это и делает
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
ну подключение к базе всё-равно должно быть поднято
для репла ты можешь имя своему тестовому подключению через def и использовать его как параметр в тестируемые функции
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну да, можно же сделать так:

(def _db (integrant/init! {:some :db :config}))

(def _result (my-handler {:method :get :uri "/..." :db _db}))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
если база ни от чего не зависит, по поднял ее вручную, записал в переменную и передаешь
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
или если хендлер зависит от базы, то

(def _handler (ig/init! {:... :db _db}))

(_handler {:request :map})
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вообще интересно, конечно
можно ли вообще считать чистой функцию, принимающую на вход db
на мой взгляд нет
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
тоже думаю что нет, это же источник данных.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
вот этот бойлерейт поместить в какой-нибудь dev ns, чтобы руками его не прописывать. Дешево и удобно
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
обоснование (это же источник данных) не понял 😊
источник

MB

Mike Bohdan in Clojure — русскоговорящее сообщество
Даже функция которая просто пишет логи помимо каких-то расчетов не может быть чистой
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну как, если функция принимает источник данных, то нет гарантий насчет того, что оттуда придет. Если бы это был результат выборки, тогда другое дело
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
можно, если db - datomic )
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
нет, потому что завтра я снесу данные, и привет
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я к тому, что держать db в глобальной переменной — это фи, а передавать параметром — это true
на мой взгляд не всё так однозначно 😊
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
один и тот же запрос в разные моменты времени возвращает разный результат, разве в датомике не так?
источник

IS

Ilshat Sultanov in Clojure — русскоговорящее сообщество
@spacegangster посмотри после запуска сюда ig.repl.state/config и   ig.repl.state/system - можно вытащить все что надо и добавить в хэлперы типа user.clj или dev.clj
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
не коннект, а именно db
в этом случае это будет слепок данных до какого-то Tx
источник