ドメインモデルをクライアント側モデルから分離する手段として、クライアントにDTOを提供するWebAPIを構築しました。私は現在、Breezeのようなクライアント側のテクノロジーを利用していますが、Breezeの使用がこのパターンにどのように影響するのか、そしてそれがどちらかまたは両方のシナリオであるのか疑問に思っています。そよ風とDTOの両方を使用するのはいつですか?
1 に答える
Breezeは、DTOを使用するか、より本格的なドメインモデルの「エンティティ」オブジェクトを使用するかを実際には気にしません。.NETの観点からは、Breezeは、その全範囲のクエリサービスを、IEnumerableまたはIQueryableとして公開できるすべてのコレクションに適用できます。クエリを使用したくない場合は、パラメーターを受け取るWebApiメソッドを介して個々のDTOまたはDTOのコレクションを公開できます。
また、プロジェクションでBreezeクエリを使用して、サーバー上のエンティティからDTOオブジェクトを構築し、クライアント上のDTOでのみ機能するオプションもあります。
クエリが重要な場合、DTOとドメインモデルの「エンティティ」の観点からの主な問題は、DTOを「クエリ可能な」オブジェクトとして公開するのがいかに簡単で、このクエリがどれほど効率的であるかということです。Entity Frameworkなどの多くのORMツールは、クエリを変換して、大量の処理のほとんどがデータベースエンジンによって実行されるようにすることができます。このような最適化は、クエリを実行するためにDTOコレクションを反復処理しようとする代替手段と比較して非常にパフォーマンスが高くなる可能性があります。
興味深い代替案の1つは、Entity FrameworkやWebApiなどを使用して、クライアントに公開するドメインモデルのマップされたサブセットのみを公開することです。つまり、EntityFrameworkを使用してDTOマッピングを実行します。したがって、2つのEFモデル、フルドメインモデルとDTOドメインモデルがあります。これの利点は、クエリ最適化の利点を引き続き利用できることです。
お役に立てれば。