さまざまなシナリオで単純な DTO を使用しているときに、同じ種類の問題に頻繁に遭遇し、それを処理するためのより良い方法があるかどうか常に疑問に思っていました。
問題は、たとえば、一連のプロパティ、子オブジェクト、および計算フィールドを持つビジネス オブジェクトがありAsset
、そのうちのいくつかは時間の意味で計算するのに高価であり、いくつかはデータ量の意味で巨大です。UI のさまざまな画面で、このオブジェクトの別のフレーバーを使用する必要があります。
- 階層が表示されているツリーで、表示名以外は必要ありません
- いくつかのプロパティのみを表示しているグリッドで
- 詳細ペインには利用可能な情報の大きなサブセットがありますが、その一部 (マップされたオブジェクトなど) はオンデマンドでのみ表示されます
このシナリオで最適なパフォーマンスを達成できるようにするために、私は常にコンテキストごとに異なる DTO を作成し、そのコンテキストで実際に使用される情報のサブセットのみを含めました。リソースを最適化するソリューションですが、これはいくつかの問題を引き起こします。
- 膨大な数の DTO クラスでクラスが急増しています
- のような同じものに異なる名前を付けるのにかなり苦労
AssetDtoForGridInTheOverviewScreenInTheUpperPaneAboveTheSplitter
します。後でそれらを維持することは言うまでもありません - ほとんどの DTO で使用されているがすべての DTO では使用されていないプロパティがあるため、変換メソッドで頻繁に繰り返します (したがって、それらをスーパークラスに入れて変換ロジックを再利用することはできません)。
私が使用しているテクノロジは ASP.NET SOAP WebServices と C# 3.5 ですが、これは言語に依存しない問題である可能性があると思います。どんなアイデアでも大歓迎です..