Шаблоны доступа к базе данных Clojure / идиомы - PullRequest
2 голосов
/ 11 октября 2011

Макросы, перечисленные в этом списке https://gist.github.com/1177043 (вставлено ниже)

(defmacro wrap-connection [& body]
  `(if (sql/find-connection)
    ~@body
    (sql/with-connection db ~@body)))

(defmacro transaction [& body]
  `(if (sql/find-connection)
     (sql/transaction ~@body)
     (sql/with-connection db (sql/transaction ~@body))))

кажется довольно полезным. Есть ли «стандартная» реализация этих? По стандарту я имею в виду что-то в clojure.contrib или подобное. Я могу легко скопировать и вставить это в мой код, но мне интересно, есть ли лучший способ. Или, другими словами, как это можно сделать?

Это мой первый опыт написания кода Clojure (я много читал об этом и о Common Lisp), поэтому я также пытаюсь понять, какие библиотеки существуют. Мне кажется, что менталитет Лиспа - это своего рода «я сам могу написать это в 15 строках, так зачем мне использовать чей-то другой».

1 Ответ

1 голос
/ 11 октября 2011

Из того, что я видел, когда вы абстрагируетесь от sql/transactions и т. Д., Абстракции имеют тенденцию быть более специфичными для приложения. написание собственных оберток, как указано выше , когда это действительно упрощает задачу, - это канонический способ решения проблем.

Используйте только столько макросов, сколько на самом деле делает вашу жизнь проще, это может быть заманчиво для следующих макросов (как в сущности) способами, которые более запутаны или сложнее поддерживать. Мне нравится эта суть; просто будьте осторожны, чтобы не чрезмерно макро.

ps: если какой-то код содержит больше пяти строк, я смотрю, чтобы кто-то написал его первым :), но многие клоюрийцы считают иначе.

...