web-dev-qa-db-ja.com

MVCS-モデルビューコントローラーサービス

私は長い間MVCを使用しており、「Service」レイヤー(たとえばJava Webプロジェクト)について聞いたことがありますが、 実際のアーキテクチャパターンについては、それに関する多くの情報が見つかりません。

MVCSの考え方は、コントローラーに存在する可能性のあるすべてのビジネスロジックをカプセル化するために、コントローラーとモデルの間のサービスレイヤーを設定することです。そうすれば、コントローラーは実行を転送して制御するためだけに存在します。また、コードを複製することなく、多くのコントローラー(WebサイトやWebサービスなど)でサービスを呼び出すことができます。

63
Matthieu Napoli

サービスレイヤーはさまざまな方法で解釈されますが、通常はコアビジネス処理ロジックがあり、MVCアーキテクチャの下にありますが、データアクセスアーキテクチャの上にあります。

たとえば、完全なシステムのレイヤーは次のようになります。

  1. ビューレイヤー:MVCフレームワークと選択したコード
  2. サービスレイヤー:コントローラーはこのレイヤーのオブジェクトを呼び出して、モデルまたはその他のリクエストを取得または更新します。
  3. データアクセスオブジェクト:これらは、必要なデータを取得/更新するためにサービスレイヤーが呼び出す抽象化です。この層は通常、データベースまたは他のシステム(LDAPサーバー、Webサービス、NoSqlタイプDBなど)を呼び出します。

サービス層は、次のことを担当します。

  • さまざまなデータソース(またはデータアクセスオブジェクト)から「モデル」を取得して作成します。
  • さまざまなリポジトリ/リソース全体で値を更新します。
  • アプリケーション固有のロジックおよび操作な​​どの実行。

MVCで使用するモデルは、サービスに由来する場合とそうでない場合があります。サービスが提供する結果を取得し、それを操作して、メディアに固有のモデル(Webページなど)にしたい場合があります。

80
Clinton

私はこのパターンを他のどこにも参照せずに自分でこのパターンを考えていましたが、Googleを検索してあなたの質問をここで見つけました:)

今日でも、について話したり投稿したりする人はほとんどいません

View-Controllerサービスパターン。

enter image description here

他の人が同じことを考えていることをあなたに知らせるために考えました。上の画像は、それがどうあるべきかを見る方法です。

現在、現在取り組んでいるプロジェクトで使用しています。

上記の画像の各レイヤーを含むモジュールに、独自の自己完結型モジュールがあります。

enter image description here

サービス層は、「クライアント」側のコントローラーがクライアントに対して行うこと、「サービス」がサーバーに対して行うことにおいて、「コネクター」「中間者」「サーバー側コントローラー」です。

言い換えれば、クライアント側の「コントローラー」は「サービス」、つまりサーバー側コントローラーとのみ「通信」します。

コントローラー--->要求と<-----サービス層からの受信

サービス層は、それを必要とするサーバー側の層に情報をフェッチまたは提供します。

サービス自体は何もしませんが、サーバー層を必要なものに接続します。

コードサンプルは次のとおりです。

enter image description here

12
Kbdavis07