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


15

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


更新1

私が求めている理由は、古典的なMVCフレームワークであるZend Frameworkでは、誰もがモデルの概念を使用しているためです。今、私はAngularJSを学んでいますが、Modelという言葉は消えて、serviceという言葉に置き換えられたようです。

私が気づいたのは、サービスは何度も何度も再利用できるシングルトンに似ていることです(例:RESTクライアント)。一方、モデルはMVCパターンのコントローラーからのデータ操作により関連しています。


あなたの研究を共有することは誰にとっても役立ちます。あなたが何を試みたのか、なぜあなたのニーズに合わなかったのか教えてください。これは、あなたが時間をかけて自分自身を助けようとしていること、明白な答えを繰り返すことから私たちを救うこと、そして何よりもあなたがより具体的で関連性のある答えを得るのを助けることを示しています。参照してください掲載する方法
GNAT

シェークスピアを言い換えると、名前に含まれるものは、他の名前のバラはまだバラです。アプリケーションモデルは、サービスとして実装することもできます。
jwenting

回答:


22

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

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


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

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


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

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

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


実際のビジネスロジックがいかに複雑になる可能性があるか、したがってモデルレイヤーとは別に追加のサービスレイヤーが役立つ理由を示す非常に具体的な例に感謝します。
wlnirvana

3

私の経験によると、MVC デザインパターン内のモデルレイヤーは、データ操作に関係するすべてのソフトウェアコンポーネント(POJO、DAO、SQL、JDBCなど)を指します。

サービスレイヤーは実際にはMVCの追加です。

モデルレイヤーコンポーネントは、コントローラーレイヤー内で呼び出されることがわかっています。後者が構築されると、簡潔に見えないことに気付くようになります(汚いコードで厄介です)。コントローラーは、追加の詳細を取得できない場合があります(たとえば、要求パラメーターを使用するDAOメソッドを呼び出す前に要求パラメーターをフォーマットします)。したがって、この追加の層、つまりサービス層を含めることができます。

最終的に、意味のある名前、パラメーターなどを持つ静的メソッド内にダーティコードを含めると、合成コントローラーレイヤーが生成されます。

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

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
これはまさにサービス層を見る方法です。しかし、その後、多くの場合、外部のAPIをビジネスモデルに提供するために使用されます。どちらのシナリオも有効だと思います。ここでの問題は、命名法の衝突にあります。
burntblark

2

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.