Skip to content

Commit 54c1c52

Browse files
committed
feat(connect): メリットとデメリットついて
1 parent d14ddf5 commit 54c1c52

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

ja/connect/README.md

+34-2
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@ Rackを参考にして実装されています。
115115

116116
## 実装してみよう
117117

118-
`Junction`というConnectライクな_middleware_をサポートしたものを作成してみます
118+
JunctionというConnectライクな_middleware_をサポートしたものを作成してみます
119119

120-
`Junction``use(middleware)``process(value, (error, result) => { });`を持っているシンプルなクラスです。
120+
Junctionは`use(middleware)``process(value, (error, result) => { });`を持っているシンプルなクラスです。
121121

122122
[import junction.js](../../src/connect/junction.js)
123123

@@ -130,3 +130,35 @@ Rackを参考にして実装されています。
130130

131131
[import junction-example.js](../../src/connect/junction-example.js)
132132

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

Comments
 (0)