2012-09-06 24 views
3

我讀過一篇名爲Blogging with Noir的博客文章,我真的很驚訝,作者使用java.jdbc而不是像Korma這樣的庫,這讓我感到驚訝。在你的代碼中編寫SQL查詢有什麼好處,而不是讓工具爲你做?爲什麼有人想使用JDBC而不是像korma這樣的庫?

+4

因爲他們知道SQL好過工具?因爲SQL是普遍知識,每個工具都有自己的做事方式?爲什麼大部分遊戲都是用C/C++編程,而不是用* Game Maker Studio 2000 *編程的? – Konerak

+0

只是爲了避免學習一個新的抽象 – Ankur

回答

9

我想這是你可以選擇直接使用Clojure中的API,而不是使用包裝的通常的原因:

  • 現有的知識:你已經知道JDBC很好,知道它將完成工作,爲什麼花時間學習新的抽象,除非有明顯的優勢?
  • 不確定性 - 圖書館是否具備您需要的所有功能?它將在未來繼續保持並實現新功能嗎?
  • 穩定性 - 包裝可能尚未成熟,所以如果發現突變或發現錯誤,您將冒着代碼不得不改變的風險。
  • 完整性 - 包裝不得(還)封裝所有的,你需要
  • 架空原始API的功能 - 抽象的,有時額外的圖層添加一個性能開銷,你並不需要/想
  • 額外的依賴關係 - 增加了構建的複雜性,以及在需要保留的抽象數量方面的概念開銷。

歸根結底這是一個權衡 - 上面是您可能需要使用底層API的原因,但也有可能會選擇使用的包裝也同樣充分的理由:

  • 更多慣用的 - 與基於Java的API相比,包裝庫可能會給你更清潔,更優雅的代碼(特別是如果Java API必須/有狀態的話)。你必須承認科爾瑪非常優雅!
  • 更復合 - Clojure包裝往往採用功能風格,這導致與其他clojure代碼/庫輕鬆組合。
  • 新功能 - 經常Clojure的包裝添加額外的功能,原來的API不posess(例如,看一下數據綁定的蹺蹺板上搖擺的頂部添加的功能)
3

我能想到的原因有兩個:

  1. 幾乎每個人都知道SQL,幾乎沒有人知道科爾馬
  2. 這是一種猜測,因爲我不知道科爾馬自己,但原始的SQL有時是合適的,甚至必要的,如果你想要做的具體的像只存在於特定的數據庫
7

科爾馬IMO是幾乎沒有準備好可以作爲完全取代SQL功能的東西。這絕對是方便的,但現在我的很多查詢(原始「...」)片段在其中,而對於更復雜的東西,所有主要查詢都在SQL視圖內完成,然後通過korma選擇。

主要的替代,ClojureQL,甚至不使用Clojure工作1.3+

總之,這是很難抽象SQL,和科爾馬 - 即使它試圖成爲最小的,這意味着你仍然有理解SQL很好使用它 - 尚未完成。

+0

我不知道這一點,謝謝。 –

相關問題