11

私のプロジェクトでは、EF Code First アプローチを使用しています。リポジトリ レイヤー、サービス レイヤー、プレゼンテーション レイヤー (ASP.NET MVC) があります。ビューごとに専用のビューモデルを使用しています。

私が混乱しているのは、サービスがビューモデルにマッピングするためにエンティティをコントローラーに返す必要があるか、または DTO を実装してサービスから返す必要があるかということです。

そこで問題は、「EF -> リポジトリ -> サービス -> UI」という流れの場合、データ変換はどうなるかということです。「エンティティ -> DTO -> ビューモデル」または「エンティティ -> ビューモデル」?

DTOを使用すると、エンティティが繰り返されるようです。

私はベストプラクティスに従おうとしています。

4

4 に答える 4

2

アプリケーションとその複雑さに依存するため、判断するのは非常に困難です。多くの変換がある場合は、エンティティからビューモデルに移動するだけでなく、DTO を使用することをお勧めします。

一般的に、私はできるだけ小さな変換から始めます。物事が複雑になった場合でも、間に別のレイヤーを追加できます。抽象化のレイヤーを追加する方が、削除するよりも簡単であることに注意してください。

于 2013-11-12T15:18:05.163 に答える
1

理想的な世界では、すべてが結合せずに分離されます。ただし、現実の世界では、それは必ずしも実用的ではありません。

あなたのシナリオを考えると、N 層アーキテクチャ (そうではない、より階層化されたもの) を使用していないか、サービスがエンティティからの非常に限られた量のデータにのみ関心がある場合を除き、DTO は殺し過ぎ。CodeFirst エンティティは、EF によって生成されるプロキシ エンティティと比較して非常に軽量であるため、同じ情報を別のレイヤーに運ぶためだけに DTO を導入する必要はありません。

個人的には、エンティティに共通のインターフェイスを実装させ、それを使用してサービス層から返すようにします。これは、サービスが効果的に DAL に関連付けられていることを意味します (これはそれほど素晴らしいことではないと思います) が、あなたの状況ではそれでうまくいくでしょう。これにより、後で気が変わった場合に、後でサービス層で実際の DTO に交換できる柔軟性が得られます。

于 2013-11-12T15:23:52.087 に答える