web-dev-qa-db-ja.com

サービスとDAOとMVC

私は文字通りデザインパターンに非常に慣れており、Service Layers、DAO Layers&Model-View-Controllers inプログラミング。

As StackOverflowは、コンセプトやロジックの説明に関して、非常に才能のある多くの聴衆を持つ非常に素晴らしいプラットフォームです。

私はこれらすべての違いを説明するエレガントな答えを期待しています。いつ使用しますか? MVCパターンよりもサービス/ DAOアーキテクチャを好むのはいつですか? Service/DAOアーキテクチャーにコントローラーはありますか? Service/DAOとModel/View/Controllerを統合できる可能な組み合わせは何ですか?.


この投稿は、同じ疑問を持つ他のすべての人にも役立つでしょう。良い投稿は常にサポートされるべきです。 SOで質問が解決できないため、他の質問の重複としてこれを閉じないようにモデレーターに依頼してください。

9
Adil

サービスとDAOとMVC

これらを直接比較しないでください。サービスとDAOは、n層アプリケーションの層を形成します。 MVCアプリケーションには、サービスとDAOを含めることができます。

サービスレイヤーは、基本的にアプリケーションドメインへのエントリポイントとして機能し、通常はビジネスロジックを含む一般的な用語です。 Webアプリケーションの場合、ビジネスロジックレイヤーをサービスレイヤーとして扱うことができます。または、モバイルクライアントの場合、Web APIを公開して、サービスレイヤーを扱うことができます。つまり、GUI /クライアントに関係なく、ビジネスロジックをそのまま再利用できます。

DAOは、データストレージメカニズムを抽象化する単なるオブジェクトです。

[〜#〜] mvc [〜#〜]は、VとCがプレゼンテーション層を「厳密に」形成したデザインパターンであり、Mはプレゼンテーション(GUI)を超えるすべてのものを含めることができます。 MVCのモデル部分は、長い間意見ベースのトピックでした。しかし、これが私が典型的なMVCアプリケーションを構築する方法です。

Presentation Layer
  -> Views
  -> ViewModels  
  -> Controllers 

Service Layer
  -> Includes business logic
  -> Uses data access interfaces

Data Access Layer (DAOs)
  -> Contracts (interfaces) for persistent storage
  -> Interface implementations

Entities
  -> POCO/ POJO that represent data
6
Nikhil Vartak

MVCはSmalltalkに戻ります。 Model-View-Controllerは通常「ユーザーインターフェース」を意味します。コントローラーはサーバー側コンポーネント(Webアプリ用)であり、Viewクライアントからの要求を受け入れ、モデルを適切に更新し、それを必要とするすべてのViewクライアントに結果を返します。

サービス/ DAOはこれらのレイヤーをサーバー側に拡張します。 Webコントローラーが、ビュー要求を満たすためにモデルを更新する複数のサービスインスタンスを所有すると想像できます。

サービスはモデルオブジェクトを使用してビューリクエストを実行し、データアクセスレイヤーを使用して結果をデータベースに永続化します。

アーキテクチャは次のようになります。

View ---> Controller ---> Service ---> Data Access Layer

モデルはすべてのレイヤーに何らかの形で存在します。

最近、マイクロサービス、特にRESTについてよく耳にします。あなたは彼らがここにどこに収まるのか疑問に思うかもしれません。

これは、サービス層を実装する1つの方法です。

ViewとControllerは密接に結びついていると思います。それらはクライアントとバックエンド間の通信のために実装されます。ユーザーインターフェースは大きく変化しています。デスクトップ/タブレット、ブラウザ、モバイルなど-ただし、すべて同じバックエンドサービスを使用してタスクを実行できます。

5
duffymo