Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Middleware Pattern @_ayato_p/Cybozu Startups, Inc.
Slide 2
Slide 2 text
(def _ayato_p {:name "あやぴー" :lang [:clojure :ruby :javascript] :company "Cybozu Startups, Inc."})
Slide 3
Slide 3 text
(def _ayato_p {:name "あやぴー" :lang [:clojure :ruby :javascript] :company "Cybozu Startups, Inc."}) Clojure 歴、半年
Slide 4
Slide 4 text
Agenda Ring Ring Middleware Middleware Pattern
Slide 5
Slide 5 text
Ring
Slide 6
Slide 6 text
Ring サーバーを抽象化する仕様/デファクトスタンダード Ring Handler, Requests, Responses, Middleware 公式には jetty のアダプタがある 最近で Ring インターフェイスを実装したものだと Immutant などがある
Slide 7
Slide 7 text
Ring Middleware
Slide 8
Slide 8 text
Ring Middleware ただの高階関数 Ring Middleware の場合、 Handler を受け取って Request を受け取る関数を返すような書き方されてる
Slide 9
Slide 9 text
Ring Middleware (defn wrap-secret-key[handler secret-key] (fn [req] (handler (assoc-in req [:params :secret-key] secret-key)))) (defn make-handler [handler] (-> handler (wrap-secret-key "This is secret!!") wrap-something wrap-anything wrap-defaults)) (app (make-handler (get-ring-handler)))
Slide 10
Slide 10 text
Middleware Pattern
Slide 11
Slide 11 text
Middleware Pattern Ring Middleware はひとつの Middleware Pattern 例 他には Boot でも適用されている
Slide 12
Slide 12 text
Use case ユーザーの入力を受け取って、関数を適用するか決めたい config ファイルを使って、関数を適用するか決めたい LazySeq に適用する関数をオプションから決めたい -> Composable な関数を作りたい!!
Slide 13
Slide 13 text
Conclusion Composable な関数を書くお供に Middleware Pattern を活用しよう
Slide 14
Slide 14 text
Enjoy Clojure