80

私は長い間MVCを使用していて、「サービス」レイヤー(たとえば、Java Webプロジェクト)について聞いていましたが、多くの情報が見つからないため、それが実際のアーキテクチャパターンであるかどうか疑問に思っていました。それ。

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

4

3 に答える 3

97

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

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

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

その場合、サービス層は次の責任を負います。

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

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

于 2011-06-02T14:37:17.690 に答える
18

私は他の場所でこれへの参照を見ることなく自分でこのパターンを考えていて、Googleを検索してここであなたの質問を見つけました:)

今日でも、について話したり投稿したりする団体はあまりありません。

ビューコントローラサービスパターン。

ここに画像の説明を入力してください

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

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

私はそれをモジュールに入れており、上の画像の各レイヤーには独自の自己完結型モジュールがあります。

ここに画像の説明を入力してください

サービス層は「コネクタ」「仲介者」「サーバー側コントローラ」であり、「クライアント」側コントローラがクライアントに対して行うこと、「サービス」がサーバーに対して行うことです。

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

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

サービスレイヤーは、情報を取得するか、それを必要とするサーバー側のレイヤーに情報を提供します。

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

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

ここに画像の説明を入力してください

于 2016-11-25T17:20:06.243 に答える
2

私は何年もMVCSパターンを使用してきましたが、Webで確実な情報を見つけることができなかったため、他の誰かが使用していることを知りませんでした。よろしければ本能的に使い始めましたが、Laravelプロジェクトにがっかりすることはありません。特にビジネスロジックが絶えず変化するアジャイル環境で作業する場合は、中規模のプロジェクトに対して非常に保守しやすいソリューションだと思います。関心の分離があると非常に便利です。

そういえば、小さなプロジェクトやプロトタイプなどにはサービスレイヤーは不要だと思いました。プロトタイプを作成するときにプロジェクトを複雑にしすぎるという間違いを犯しました。それは、最終的には、アイデアを引き出すのに時間がかかることを意味します。プロジェクトを中期的に維持することを真剣に考えているなら、MVCSは完璧なソリューションIMOです。

于 2021-05-12T20:33:30.897 に答える