@@ -115,9 +115,9 @@ Rackを参考にして実装されています。
115
115
116
116
## 実装してみよう
117
117
118
- ` Junction ` というConnectライクな_middleware_をサポートしたものを作成してみます 。
118
+ JunctionというConnectライクな_middleware_をサポートしたものを作成してみます 。
119
119
120
- ` Junction ` は 、` use(middleware) ` と ` process(value, (error, result) => { }); ` を持っているシンプルなクラスです。
120
+ Junctionは 、` use(middleware) ` と ` process(value, (error, result) => { }); ` を持っているシンプルなクラスです。
121
121
122
122
[ import junction.js] ( ../../src/connect/junction.js )
123
123
@@ -130,3 +130,35 @@ Rackを参考にして実装されています。
130
130
131
131
[ import junction-example.js] ( ../../src/connect/junction-example.js )
132
132
133
+
134
+ ## どういう用途に向いている?
135
+
136
+ ConnectやJunctionの実装を見てみると分かりますが、このアーキテクチャでは機能の詳細は_middleware_で実装されます。
137
+ そのため、本体の実装は_middleware_に提供するインタフェースの決定、エラーハンドリングの手段の提供などとても小さいものとなっています。
138
+
139
+ 今回は紹介していませんが、Connectにはルーティングに関する機能があります。
140
+ しかし、この機能も「与えられたパスにマッチした場合のみに反応する_middleware_を登録する」という単純なものです。
141
+
142
+ ``` js
143
+ app .use (' /foo' , function fooMiddleware (req , res , next ) {
144
+ // req.url starts with "/foo"
145
+ next ();
146
+ });
147
+ ```
148
+
149
+ このアーキテクチャは、入力があり出力がある場合にコアとなる部分は小さく実装できることが分かります。
150
+
151
+ そのため、ConnectやRackなどのHTTPサーバでは「リクエストに対してレスポンスを返す」というのが決まっているので、
152
+ このアーキテクチャは適しています。
153
+
154
+ ## どういう用途に向いていない?
155
+
156
+ このアーキテクチャでは機能の詳細が_middleware_で実装されます。
157
+ また、_ middleware_を登録する順番に強く依存していることが分かります。
158
+
159
+ そのため、` use(middleware) ` で登録する順番が変わるだけで挙動が変わる事があります。
160
+ _ middleware_間に依存関係がある場合に、特定の順番で登録しなければならないという制限が作られる場合もあります。
161
+
162
+ _ middleware_は柔軟ですが、_ middleware_間で起きる複雑な前提の解決を利用者が行わなくなる可能性があります。
163
+
164
+ これらを解消するためにコアはそのままにして、最初から幾つかの_middleware stack_を作ったものが提供されるケースもあります。
0 commit comments