web-dev-qa-db-ja.com

MVC:モデルとサービスの違いは何ですか?

一部のフレームワークではロジックレイヤーが「モデル」と呼ばれるのに対し、一部のフレームワークでは「サービス」と呼ばれるのはなぜですか。それらは互いに異なるのですか、それとも命名規則だけが異なるのですか?


アップデート1

私が尋ねている理由は、古典的なMVCフレームワークであるZend Frameworkでは、誰もがモデルの概念を使用しているからです。現在AngularJSを学習していますが、Wordモデルが消えてWordサービスに置き換えられたようです。

私が気づいたのは、サービスは、何度も再利用できるシングルトンのようなものです(例:a REST client)ですが、モデルは、 MVCパターン。

16
Guilhem Soulas

モデル:オブジェクトに属するフィールド、オブジェクトからデータを取得/設定するのに役立つメソッド(姓名を返すフルネームアクセサー)

サービス:1つ以上のモデルで操作を実行するためのメソッド。「作業単位」、トランザクションなどを参照してください...


Employee :: createは、一連のデータを取得し、必要に応じてモデルの検証を実行して、Employeeオブジェクトを返すだけです。

EmployeeService :: hireEmployeeは、従業員の作成、ウェルカムメールの送信、メールボックスの作成、サンドイッチの作成などを行います。データセットや結果コードなどを返します。


これは検証にも影響を与える可能性があります。

モデルの検証:従業員にはID、姓名、および誕生日が必要です

サービスの検証:バーテンダーのポジションの従業員は21歳以上で、マネージャーによって承認されている必要があります。

22
FMJaguar

私の経験によれば、MVC内のModelレイヤー設計パターンは、データ操作に関連するすべてのソフトウェアコンポーネント(POJO、DAO、 SQL、JDBCなど)。

サービス層は実際にはMVCへの追加ですが、

ModelレイヤーコンポーネントはControllerレイヤー内で呼び出されることがわかっています。後者がビルドされると、簡潔に見えない(汚れたコードでは面倒)ことに気付くでしょう。コントローラーは追加の詳細情報を提供しない場合があります(たとえば、それらを消費するDAOメソッドを呼び出す前に要求パラメーターをフォーマットする...)。したがって、この追加のレイヤー、つまりServiceレイヤーを含めることができます。

最終的には、静的メソッド内のダーティコードを意味のある名前やパラメーターなどで囲んで、合成コントローラーレイヤーを作成できます。

このリンクを見てください:

https://stackoverflow.com/questions/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2

構造的にこれらの基本クラスは同じですが、MVCS実装のサービス層とモデル層の異なる懸念を分類するために使用されます

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

したがって、基本クラスは似ていますが、これらの基本クラスを拡張して作成された具象クラスは、2つのまったく異なる目的に役立ちます。

2
Sagar Awasthi