一部のフレームワークではロジックレイヤーが「モデル」と呼ばれるのに対し、一部のフレームワークでは「サービス」と呼ばれるのはなぜですか。それらは互いに異なるのですか、それとも命名規則だけが異なるのですか?
アップデート1
私が尋ねている理由は、古典的なMVCフレームワークであるZend Frameworkでは、誰もがモデルの概念を使用しているからです。現在AngularJSを学習していますが、Wordモデルが消えてWordサービスに置き換えられたようです。
私が気づいたのは、サービスは、何度も再利用できるシングルトンのようなものです(例:a REST client)ですが、モデルは、 MVCパターン。
モデル:オブジェクトに属するフィールド、オブジェクトからデータを取得/設定するのに役立つメソッド(姓名を返すフルネームアクセサー)
サービス:1つ以上のモデルで操作を実行するためのメソッド。「作業単位」、トランザクションなどを参照してください...
Employee :: createは、一連のデータを取得し、必要に応じてモデルの検証を実行して、Employeeオブジェクトを返すだけです。
EmployeeService :: hireEmployeeは、従業員の作成、ウェルカムメールの送信、メールボックスの作成、サンドイッチの作成などを行います。データセットや結果コードなどを返します。
これは検証にも影響を与える可能性があります。
モデルの検証:従業員にはID、姓名、および誕生日が必要です
サービスの検証:バーテンダーのポジションの従業員は21歳以上で、マネージャーによって承認されている必要があります。
私の経験によれば、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つのまったく異なる目的に役立ちます。