web-dev-qa-db-ja.com

DTOをクリーンなアーキテクチャのどこに配置する必要がありますか?

enter image description here

クリーンなアーキテクチャを実装し、DTOの概念に苦労する必要があります。私が理解しているように、プレゼンテーション層(asp mvc)でドメインオブジェクトを使用することはできません。代わりに、DTOまたはviewmodelを使用する必要があります。これらのDTOがどこに行くべきかわかりません。コアレイヤーとして2つのプロジェクト(ドメイン、アプリケーション)があります。ドメインはエンティティを保持します。例:「Post」+リポジトリインターフェース例:「IPostRepository」。アプリケーションはロジックex: 'IPostManager' + 'PostManager'を保持します。エンティティへのDTOおよびDTOマッピングはどこで発生する必要がありますか? Asp MVC、アプリケーション、またはドメイン?

8
Emad Ali

すでに知っているように、Dtoはさまざまなタイプであり、動作はなく、データの転送にのみ使用されます。たとえば、MVCパターンのモデルや、おそらく接尾辞「classNameDto」で名前が付けられているクラスです。

あなたの場合、それは実際にはアプリケーション層を使用しているコンテキストに依存します。一部の開発者は、「アプリケーションサービス」がアプリケーションに固有であり、UIに密接に関連していることを理解しています。

この場合、これは、データがドメインモデルとの間でマッピングされるDtoを配置するのに適した場所です。

それ以外の場合、マッピングがWebレイヤーで行われる場合、Dtosはそこに移動する必要があります。

@Jimmy Bogardが言ったように、簡単に言えば、「クラスを実際に使用されている場所の近くに配置してください」。

また、クリーンなアーキテクチャについて詳しく調べて、正しい方向に向かっているかどうかを確認することをお勧めします。

お役に立てれば :)

2
francisfai

これは単一のアプリケーションのように見えます。その場合、DTOを使用される場所のできるだけ近くに配置します。 MVCの場合、私のDTOは私のビューのすぐ隣にあります。

  • ビュー
    • アカウント
    • Index.cshtml
    • IndexModel.cs

または、Razor Pagesの場合、DTOは単に内部クラスです。実用的な例については、私のContosoUniversityの例を参照してください。

MVCの例

Razor Pagesの例

それは「クリーンなアーキテクチャ」ではなく「垂直スライスアーキテクチャ」ですが、それは問題ではありません。クラスを実際に使用される場所の近くに配置します。

0
Jimmy Bogard

あなたの場合、DTOはプレゼンテーションとドメインの両方からアクセスされます。それを持っている方が良いですインフラストラクチャそしてそこからそれを参照してください。

0
mano