MVC と Service と

ウェブサイト・ウェブアプリケーションを MVC モデルで騙し騙し構築・更新してきましたが、どうしてもファットモデルやファットコントローラーを避けられなかったり、機能の追加する場所に一貫性が保てなくなってきました。そこで、サービスを追加して MVC + Service に再構築していくことを覚悟しました。

Service の役割や考え方について調べましたが、MVC ほどルールがはっきり決められているわけではありませんでした。モデルやコントローラーに分けづらい機能をサービスにすることにします。

サービスが担う機能

今までモデルやコントローラーに含めていた機能のうち次に該当する機能をサービスに移動します。

  • データベースのトランザクションを使用する機能
  • 自動的に実行する機能 (cron)

処理の流れ

今までは、リクエストからレスポンスまでの流れは次のとおりでした。

  1. リクエストをコントローラーが受ける。
  2. コントローラーがモデルを操作する。
  3. コントローラーがビューを生成する。
  4. コントローラーがレスポンス (ビュー) を返す。

これからは、サービスを 2. に差し込みます。

  1. リクエストをコントローラーが受ける。
  2. コントローラーがサービスを呼び出す。
  3. サービスがモデルを操作する。
  4. コントローラーがビューを生成する。
  5. コントローラーがレスポンス (ビュー) を返す。

ただし、サービスが担う機能を使う場合のみで、そのような機能を使わない場合は今まで通りの流れにします。

サービスのアクセス

次のアクセス以外のアクセスは禁止です。

  • コントローラー → サービス
  • コントローラー → モデル
  • コントローラー → ビュー
  • サービス → モデル

これから、再構築をするにつれて変更がでるかもしれません。

Comments

コメントする