2
仍在学习clojure,并试图围绕clojure和协议进行实验。我的主要问题是我的代码是否提取低级别数据库交互的正确方法,以便为我的数据库添加特定数据类型提供更简洁的方法?clojure,用于插入数据库项目的协议
(defn- db-insert
[table record]
"Inserts record based on table/record map"
(sql/with-connection
rosay-db
(sql/transaction
(sql/insert-record table record))))
;; public interface
(defprotocol DBFactory
(add-item [_] "Adds item to db"))
(defrecord Page [name description keywords frontpage client_id pages_type_id]
DBFactory
(add-item [_]
(db-insert :pages {:name name
:description description
:keywords keywords
:frontpage frontpage
:client_id client_id
:pages_type_id pages_type_id})))
(defrecord Client [username password email domain]
DBFactory
(add-item [_]
(db-insert :clients {:username username
:password password
:email email
:domain domain})))
然后在我的nrepl我可以做到以下几点:
rosay.server=> (use 'rosay.models)
nil
rosay.server=> (add-item (->Client "booyaka" "fark" "mailzer" "domain.com"))
{:updated_on nil, :created_on #inst "2012-12-04T04:25:22.672462000-00:00", :email "mailzer", :domain "domain.com", :password "fark", :username "booyaka", :id 10}
我猜我只是好奇,如果我攻击这个问题的方法是正确的,甚至是有道理的。到目前为止,我可以通过简单地用我的记录类型调用我的协议来完成客户端和页面,并且一切似乎都行得通。也许我正在克服这个问题,只写几个函数就是了?
感谢
感谢您的快速响应! – battlemidget