Почему кто-то хочет использовать JDBC вместо библиотек, таких как korma?

Я прочитал пост в блоге под названием " Blogging with Noir", и я был искренне удивлен, что автор использует java.jdbc вместо библиотек вроде Korma, что я нахожу удивительным. Каковы преимущества написания SQL-запросов в вашем коде вместо того, чтобы позволить инструментам делать это за вас?

3 ответа

Решение

Я полагаю, что по обычным причинам вы можете использовать API непосредственно в Clojure, а не обертку:

  • Существующие знания: вы уже хорошо знаете JDBC и знаете, что он выполнит свою работу. Зачем тратить время на изучение новой абстракции, если нет явного преимущества?
  • Неопределенность - есть ли в библиотеке все необходимые функции? Будет ли он продолжать поддерживаться и внедрять новые функции в будущем?
  • Стабильность - оболочка может еще не быть зрелой, поэтому вы рискуете изменить код, если произойдут критические изменения или обнаружатся ошибки.
  • Полнота - оболочка может (пока) не инкапсулировать всю функциональность оригинального API, которая вам нужна
  • Накладные расходы - иногда дополнительные уровни абстракции добавляют накладные расходы производительности, которые вам не нужны / не нужны
  • Дополнительная зависимость - добавляет сложность вашей сборке и концептуальные издержки с точки зрения количества абстракций, которые вы должны держать в своей голове.

В конечном счете, это компромисс - выше приведены причины, по которым вы можете использовать базовый API, но есть и веские причины, по которым вы можете использовать оболочку:

  • Более идиоматичный - библиотека-оболочка, скорее всего, даст вам более чистый и более элегантный код, чем API на основе Java (особенно, если Java API является обязательным / сохраняющим состояние). Вы должны признать, что Korma довольно элегантна!
  • Более компонуемо - Оболочки Clojure, как правило, принимают функциональный стиль, что приводит к легкой компоновке с другими кодами / библиотеками clojure.
  • Новые функции - часто оболочки Clojure добавляют дополнительные функции, которых нет у исходного API (например, посмотрите на функциональность привязки данных, добавленную поверх Swing by Seesaw)

Korma IMO почти не готова к использованию в качестве полной замены SQL. Это определенно удобно, но сейчас во многих моих запросах есть (необработанные "...") фрагменты, а для более сложных вещей все основные запросы выполняются внутри представлений SQL, которые затем выбираются через korma.

Основная альтернатива, ClojureQL, даже не работает с Clojure 1.3+

Короче говоря, абстрагировать SQL сложно, и Korma - хотя он и пытается быть минимальным, а это значит, что для его использования все равно нужно понимать SQL - еще не закончена.

Я могу думать о двух причинах:

  1. Почти все знают SQL, почти никто не знает Korma
  2. Это предположение, потому что я сам не знаю Korma, но сырой SQL иногда подходит или даже необходим, если вы хотите сделать что-то конкретное, например, функции, которые присутствуют только в конкретной базе данных
Другие вопросы по тегам