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