ミドルウェアとモデルのオブザーバは、どう使い分けますか。
ミドルウェアはHTTPリクエストに紐づくので、Webからの入口に効かせるものに使います。オブザーバはモデルの保存に紐づくため、バッチやキューからの更新でも必ず走ります。
面接官が見ているのは似た仕組みの境界を説明できるか。
これは「ミドルウェアに置くのが適切な処理はどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- HTTP リクエストに紐づくものはミドルウェア、保存・更新に紐づくものはオブザーバ
その通りです。バッチやキューから更新した場合でも必ず走らせたいならオブザーバです。 - どちらも同じなので好みで選ぶ
発火するタイミングが違うので、選び方を誤ると処理が走りません。 - オブザーバは古い書き方で、今はミドルウェアに統一する
どちらも現役で、役割が違います。 - ミドルウェアはモデルごと、オブザーバはルートごとに設定する
逆です。ミドルウェアがルート、オブザーバがモデルです。
面接官は何を見ているか
- ミドルウェアは HTTP リクエスト単位だと言えた
- オブザーバはモデルの永続化イベント単位だと言えた
- 「HTTP を経由しない処理」での挙動の違いに触れた
模範解答
ミドルウェアはHTTPリクエストに紐づくので、認証や入力の前処理のような「Webからの入口」に効かせるものに使います。オブザーバはモデルの保存・更新・削除に紐づくので、HTTPを経由しないバッチやキューからの更新でも必ず走ります。「経路によらず必ず実行したい」ならオブザーバ、「Webからのアクセスだけ制御したい」ならミドルウェアです。