DDDのプレゼンテーションVSアプリケーション層


9

ドメインドリブンデザインのプレゼンテーションレイヤーとアプリケーションレイヤーの間に明確な線を引くことができません。

コントローラ、ビュー、レイアウト、JavaScript、CSSファイルはどこに配置すればよいですか?

アプリケーション層かプレゼンテーション層か?

そして、それらが同じレイヤーですべて一緒に行く場合、何が他のレイヤーを含みますか?空っぽですか?

回答:


7

誰かが「アプリケーション層」と「プレゼンテーション層」を作成して名前を付けたからといって、アプリケーションにそれらがあるはずだとは限りません。かなりの量のコードをまとめてグループ化し、このグループに名前を付けて、開発者間のコミュニケーションとコードを明確にするために、レイヤーを作成する必要があります。

DDDのポイントから。アプリケーション層は、ドメイン層ではないすべてのものです。これには、アプリケーションロジック、プレゼンテーション、アプリケーションサービスが含まれます。


2
本当にありがとうございます。私の場合、アプリケーションとプレゼンテーションを分離することは役に立たないことを実感させられました。シンプルさを第一に!
Matthieu Napoli

DDDのプレゼンテーションレイヤーにUIではなくREST APIがある場合、REST APIはアプリケーションまたはプレゼンテーションレイヤーになります。私はREST APIは、プレゼンテーション層であることを確信していたので、私は今..混乱しています
ダリオGranich

8
実際には、DDD は、プレゼンテーション、アプリケーション、ドメイン、インフラストラクチャの4つの層を、上から下の順序で規定しています。したがって、アプリケーション層には「プレゼンテーション」は含まれませ。また、コードをグループ化することだけでなく、コンパイル時の依存関係の方向を制約することも重要であるため、大量のコードが記述される前にレイヤーを決定することは常に良い考えです。
ホジェリオ

11

DDDの観点から見ると、アプリケーション層とプレゼンテーション層には大きな違いがあります。

DDDは、DDDビルディングブロックと制限されたコンテキスト、ユビキタス言語などの概念を使用してドメインをモデル化する方法を中心にしていますが、アプリのさまざまなレイヤーを明確に識別して分離することは依然として重要です。

アーキテクチャは、成功するDDDアプリの実装に大きな役割を果たします。最近話題になった有名な建築は、タマネギ建築です。

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

この設計では、UI /プレゼンテーション層とアプリケーション層が明確に分離されています。2をマージすると、2つのレイヤーが密接に結合し、明確な個別の懸念と責任が生じます。

プレゼンテーション層は、プレゼンテーションロジックのみを格納する必要があります。知識が多すぎるスマートUIは避けてください。これは主に、CSS、JS、テンプレート、フォーム、および応答オブジェクトと要求オブジェクトに関連するすべてに加えて、MVCのコントローラーとビューを収容します。

プレゼンテーションを通じて発行されたアクションは、コマンドを通じてアプリケーション層に委任されます。アプリケーション層には、アプリケーションロジックが含まれています。通常はユースケースにマッピングされます。これには、ユースケースを満たすためにシステムが何をすべきかが含まれています。一般的なアプリケーションサービスは、リポジトリに集約を返すように要求し、その集約に対してアクションを呼び出します。

Vaughn VernonのIDDDのサンプルプロジェクトをご覧ください


2
+1。これが私のプロジェクトの実装方法です。そうすることで、すぐに稼ぐことができました。私はアプリケーション層に抽象化したので、複数のプレゼンテーション層を持つことができました。たとえば、私たちのWeb APIとWebサイトはどちらもアプリケーションレイヤーを消費します。これにより、私のWebアプリはWeb APIとの間のメッセージングをフレーム化する必要がなく、すべてのロジックの同期を保つため、多くの時間と重複コードを節約できます。ふたつの間に。
Sinaesthetic

どこにあるentry pointcomposition root置か?Applicationレイヤーの責任だといつも思っていました。しかし、今はこれがPresentationレイヤーのように見えます。
Denis535

2

ドメイン駆動設計は、プレゼンテーション層またはアプリケーション層とは関係ありません。DDDは、ドメイン層に主に焦点を当てた方法論です。つまり、DDDはドメインレイヤーを除いて他のレイヤーに関する制約を課しません。また、他の方法論の文脈であなたの質問も尋ねられる可能性があります。

とはいえ、DDDアプリケーションに4層アーキテクチャを使用することは非常に一般的です。レイヤーとその用途を示すアプリケーションの例を以下に示します:DDDSampleアーキテクチャー。したがって、このアーキテクチャを使用することを選択した場合、ビューとレイアウトはインターフェース層に移動し、コントローラーは、インターフェースに依存しない場合はアプリケーション層に移動します。

DDDは制約を課さないと述べたように、他の種類のアーキテクチャを選択することもできます。さまざまな構造を持ちながら、DDDアプリケーションにも使用できる多くのMVCフレームワークがあります。次に、もちろん、それに応じてビューとレイアウトを配置します。

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