2017-07-25 65 views
0

我是clojure的新手。我想從數據庫中獲取帶有字段的x記錄,並且想要將記錄插入到數據庫中。在這種情況下,我應該使用defrecorddefschema之間的哪一個?Clojure:defrecord和defschema的區別

這些是一樣的嗎?

+0

如果我沒有錯。 defschema源自schema.core(clojure腳本庫)。 defschema和defrecord都是不同的。在這種情況下,我應該使用defrecord。如果我錯了,請糾正我。 – Srini

回答

1

defschemadefrecord不引用數據庫模式(「數據庫形狀」)也不引用記錄(即關係數據庫中的行)。

Schema是一個庫,用於描述數據的形狀,並驗證某些數據是否符合此形狀。它類似於最近的clojure.spec。 Clojure 記錄是自定義數據類型,它看起來有點像Java類。

很容易爲每個實體編寫「面向對象」數據庫通信與記錄。但是,所有數據庫都包含數據,這些數據只是列表,映射,集合和一些基本數據類型。我建議您將數據保存在內置的Clojure數據結構中,並且不要將其隱藏在不必要的抽象中。 (旁註:您的數據庫組件,而不是DB實體,很可能是一個Clojure的記錄例如,Component生命週期管理使用記錄。)

一個良好的開端是Honey SQL,它允許你將SQL查詢構建爲Clojure數據結構。您可以獲取數據並使用Clojure的全部功能對數據進行操作。然後,當你對「打開所有的數據(沒有封裝)」感到滿意時,去描述你的數據的形狀,什麼是有效的,什麼不是。 clojure.spec是一個強大的工具。