MVCのC(コントローラ)はモデルとビューをコントロール(制御)するのが主な責務である。
具体的にコントローラで行うべき処理は以下の通り。
1、リクエストパラメータを適切なモデルクラスに渡し、そのアクションの目的を実現するための処理をモデルクラスに移譲する。
(コントローラはどのようなリクエストパラメータが送らてくるかを知り、それをどのモデルクラスのメソッドに渡せば良いか知っている)
2、移譲したモデルクラスが返す情報を適切なビューに渡し、レスポンスの描画処理をビューに移譲する。
(コントローラはモデルクラスが返す情報を知り、その情報をどのビュー(erbやシリアライザなど)に渡せば良いか知っている)
3、移譲したモデルクラスで例外が発生した時に適切なエラーハンドリングを行う。
(コントローラはモデルクラスで発生する可能性のある例外を知り、例外の種類によってどのような対処をすべきか知っている)
この3点がコントローラの責務。
あくまでコントローラは「交通整理」をするだけで、その他のことはほとんど何もしない。処理の目的は知っているが、手段は知らない。そんな存在。
このようなコントローラの作りにすると、MVCの各レイヤーが疎結合に保たれ、保守しやすいコードになる。
コメント