我讀過一篇名爲Blogging with Noir的博客文章,我真的很驚訝,作者使用java.jdbc而不是像Korma這樣的庫,這讓我感到驚訝。在你的代碼中編寫SQL查詢有什麼好處,而不是讓工具爲你做?爲什麼有人想使用JDBC而不是像korma這樣的庫?
3
A
回答
9
我想這是你可以選擇直接使用Clojure中的API,而不是使用包裝的通常的原因:
- 現有的知識:你已經知道JDBC很好,知道它將完成工作,爲什麼花時間學習新的抽象,除非有明顯的優勢?
- 不確定性 - 圖書館是否具備您需要的所有功能?它將在未來繼續保持並實現新功能嗎?
- 穩定性 - 包裝可能尚未成熟,所以如果發現突變或發現錯誤,您將冒着代碼不得不改變的風險。
- 完整性 - 包裝不得(還)封裝所有的,你需要
- 架空原始API的功能 - 抽象的,有時額外的圖層添加一個性能開銷,你並不需要/想
- 額外的依賴關係 - 增加了構建的複雜性,以及在需要保留的抽象數量方面的概念開銷。
歸根結底這是一個權衡 - 上面是您可能需要使用底層API的原因,但也有可能會選擇使用的包裝也同樣充分的理由:
- 更多慣用的 - 與基於Java的API相比,包裝庫可能會給你更清潔,更優雅的代碼(特別是如果Java API必須/有狀態的話)。你必須承認科爾瑪非常優雅!
- 更復合 - Clojure包裝往往採用功能風格,這導致與其他clojure代碼/庫輕鬆組合。
- 新功能 - 經常Clojure的包裝添加額外的功能,原來的API不posess(例如,看一下數據綁定的蹺蹺板上搖擺的頂部添加的功能)
3
我能想到的原因有兩個:
- 幾乎每個人都知道SQL,幾乎沒有人知道科爾馬
- 這是一種猜測,因爲我不知道科爾馬自己,但原始的SQL有時是合適的,甚至必要的,如果你想要做的具體的像只存在於特定的數據庫
7
科爾馬IMO是幾乎沒有準備好可以作爲完全取代SQL功能的東西。這絕對是方便的,但現在我的很多查詢(原始「...」)片段在其中,而對於更復雜的東西,所有主要查詢都在SQL視圖內完成,然後通過korma選擇。
主要的替代,ClojureQL,甚至不使用Clojure工作1.3+
總之,這是很難抽象SQL,和科爾馬 - 即使它試圖成爲最小的,這意味着你仍然有理解SQL很好使用它 - 尚未完成。
+0
我不知道這一點,謝謝。 –
相關問題
- 1. 爲什麼要使用像GitHub這樣的私有存儲庫?
- 2. 爲什麼會有人想要使用Invoke()(不是BeginInvoke())?
- 3. 爲什麼NSArray具有indexOfObjectPassingTest方法而不是像NSSet這樣的objectsPassingTest?
- 4. 爲什麼有人想要綁定服務(而不是創建它),而不是使用線程?
- 5. 爲什麼有人會使用乘法而不是乘法器
- 6. 爲什麼有人會像這樣構造一個while循環?
- 7. SQLite異常:沒有這樣的表。想不通爲什麼
- 8. (Java)爲什麼有些人仍然使用awt庫而不是swing?
- 9. 爲什麼Web開發人員不這樣做與數據庫?
- 10. 爲什麼IE8不是這樣的JS?
- 11. 爲什麼不使用像java.util。*這樣的通配符導入?
- 12. 爲什麼jQuery的行爲像這樣
- 13. 爲什麼總是這樣?
- 14. 爲什麼在onDeviceReady中這是不是像往常一樣?
- 15. 有人明白爲什麼這樣不能編譯?
- 16. 爲什麼我不能像這樣在MySql上使用--position?
- 17. 爲什麼我的CSS效果是這樣的? (不是我想要的)
- 18. 什麼使用,而不是數據庫?
- 19. 爲什麼在jmeter中使用JDBC postproecssor代替JDBC採樣器
- 20. 有人有任何想法爲什麼這段代碼不適用於Firefox?
- 21. 有人可以解釋爲什麼答案是「不正確」而不是什麼?
- 22. 爲什麼不這樣做?
- 23. 爲什麼在Firefox,而不是這個@ Html.Raw()使用的Chrome
- 24. 爲什麼人們使用i = i + 1而不是i ++?
- 25. 爲什麼人們使用setTimeout(「func()」,...)而不是setTimeout(func,...)
- 26. 爲什麼人們在C++中使用`main()`而不是`int main()`?
- 27. 爲什麼人們使用Type * var而不是Type * var?
- 28. 爲什麼這個列表項是使用element.style而不是我的自定義樣式進行樣式化的?
- 29. 這是爲什麼這樣做呢?
- 30. 這是爲什麼這樣工作?
因爲他們知道SQL好過工具?因爲SQL是普遍知識,每個工具都有自己的做事方式?爲什麼大部分遊戲都是用C/C++編程,而不是用* Game Maker Studio 2000 *編程的? – Konerak
只是爲了避免學習一個新的抽象 – Ankur