1

一連のルートとハンドラーを備えた構成アプリがあります。

(defroutes app-routes
  (GET "/stuff/:id" [:as request] (stuff/get-stuff request))
  (POST "/stuff/" [:as request] (stuff/create-stuff request))

各ハンドラーは、次のように入力を検証します

(defn create-stuff
  [request]
  (my-validation/validate-request
    request
    my-validation/create-stuff-validator
    stuff-ok-fn))

検証コードは Metis に基づいており、次のようになります。

(metis/defvalidator :create-stuff-validator
  [:db :presence])

(defn validate-request
  [request request-validator ok-function]
  (let [validation-result (request-validator request)]
    (if (empty? validation-result)
      (ok-function request)
      (bad-request validation-result))))

私の問題は、create-stuff のコードが各ルート ハンドラ間で重複していることです。つまり、get-stuff 関数は create-stuff ハンドラのように見えます。唯一の違いは、バリデーター機能と、検証がうまくいった機能です。

慣用的な Clojure の方法でこの重複を抽象化するにはどうすればよいですか?

4

1 に答える 1