ウェブサイト・ウェブアプリケーションを MVC モデルで騙し騙し構築・更新してきましたが、どうしてもファットモデルやファットコントローラーを避けられなかったり、機能の追加する場所に一貫性が保てなくなってきました。そこで、サービスを追加して MVC + Service に再構築していくことを覚悟しました。
Service の役割や考え方について調べましたが、MVC ほどルールがはっきり決められているわけではありませんでした。モデルやコントローラーに分けづらい機能をサービスにすることにします。
サービスが担う機能
今までモデルやコントローラーに含めていた機能のうち次に該当する機能をサービスに移動します。
- データベースのトランザクションを使用する機能
- 自動的に実行する機能 (cron)
処理の流れ
今までは、リクエストからレスポンスまでの流れは次のとおりでした。
- リクエストをコントローラーが受ける。
- コントローラーがモデルを操作する。
- コントローラーがビューを生成する。
- コントローラーがレスポンス (ビュー) を返す。
これからは、サービスを 2. に差し込みます。
- リクエストをコントローラーが受ける。
- コントローラーがサービスを呼び出す。
- サービスがモデルを操作する。
- コントローラーがビューを生成する。
- コントローラーがレスポンス (ビュー) を返す。
ただし、サービスが担う機能を使う場合のみで、そのような機能を使わない場合は今まで通りの流れにします。
サービスのアクセス
次のアクセス以外のアクセスは禁止です。
- コントローラー → サービス
- コントローラー → モデル
- コントローラー → ビュー
- サービス → モデル
これから、再構築をするにつれて変更がでるかもしれません。
コメントする