Почему кто-то хочет использовать 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 - еще не закончена.
Я могу думать о двух причинах:
- Почти все знают SQL, почти никто не знает Korma
- Это предположение, потому что я сам не знаю Korma, но сырой SQL иногда подходит или даже необходим, если вы хотите сделать что-то конкретное, например, функции, которые присутствуют только в конкретной базе данных