Size: a a a

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

2019 June 29

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Т.е. если у тебя есть функция (defn validate-publication []) и ты хочешь переиспользовать ее для article
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
в чем проблема написать (defn validate-article [article] (-> article validate-publication some-other-validation))
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
но в целом если оно прямо вот надо именно так - то почему нет
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Mikhail Kuzmin
предположим, есть типы/классы/рода значений/объектов/сущностей.
Например, публикация и ее потомки - интервью, статься, фотоотчет, …
Есть базовая функция валидации публикации.
Я хочу расширять ее для каждого типа.

Мультиметоды тут не подходят, т.к. полностью заменяют реализацию.
Можно использовать протоколы и их реализацию через метаданные (появилось в clojure 10)
и потом просто (vary-meta x update `pub/validation (fn [old] …)
но не понятно как такие значения сериализовывать и потом востанавливать, т.к. реализация функций потеряется.

или как вариант делать декораторы вроде
(alter-var-root #'agg/schema*
               (fn [f]
                 (fn [type]
                   (cond-> (f type)
                     (isa? type :agg/test)
                     (assoc :test-agg/many {:db/cardinality :db.cardinality/many})))))
зачем вообще нужно наследование?
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Anton Chikin
в чем проблема написать (defn validate-article [article] (-> article validate-publication some-other-validation))
+
источник

ИФ

Иван Федоров in Clojure — русскоговорящее сообщество
нужен контекст – решаемая задача
источник

ИФ

Иван Федоров in Clojure — русскоговорящее сообщество
тест кейс хотя бы
источник

ИФ

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

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Я думаю, что мультиметодов человеку хватит
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Или протоколов
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Достаточно выдрать иерархию, потом от старшего ко младшему гонять свою валидацию
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
та даже мультиметоды не обязательны
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
ну и связи "старший/младший" слишком примитивные и не могут описать всех возможных вариантов
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
та даже мультиметоды не обязательны
В целом — да
источник

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
ну и связи "старший/младший" слишком примитивные и не могут описать всех возможных вариантов
Так можно на множественное наследование заехать
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Anton Chikin
Так можно на множественное наследование заехать
Не нужно наследование
источник

V

Vadim in Clojure — русскоговорящее сообщество
Опенсорсный Datomic заказывали?
https://github.com/Workiva/eva/
источник

ИФ

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

ИФ

Иван Федоров in Clojure — русскоговорящее сообщество
Еще и с valid time, помимо transaction time
источник

ИФ

Иван Федоров in Clojure — русскоговорящее сообщество
Но ЕВА тоже крутая, думаем разбирать на неделе
источник