次のようなC#で表されるSQLのテーブルがあるとします。}}次に、データベースにクエリを実行してオブジェクトを取得します。次のような値を使用します。25すべて完全に正常です。現時点で瞑想しているのはこれです。製品を表示したい場合は、画像への正確なファイルパスなど、データベースからクエリされていない追加情報が必要です。}}2.)プレゼンテーションロジックの実行中に完全なURLを指定します。p.Picture;}3.)デコレータパターンを使用する階層化されたWebアプリケーションを作成しようとしているため、最初のアプローチは(長い間使用していても)間違っているようです。これをハードコーディングするのが良い方法かどうかわかりません。2番目のアプローチは優れていますが、簡単に再利用できないという意味で劣ります。同じことをしている場所が複数あり、何かが変わる場合、...パスを保持する静的定数を指定するとうまくいくかもしれません...3番目の可能性は、保守性の点で非常に複雑に思えます。クラスの数はおそらく2倍にする必要があります。dbスキーマに含まれていないプロパティをPOCOに追加した場合、Dapper.ContribまたはRainbowおよび類似のライブラリを使用できません。「選択」が正常に機能しても、「挿入」も「挿入」もできないためです。私はすべてのコマンドに対してsql文字列をハードコーディングする必要があります。これは、同じことをずっとしているとき、しばらくすると本当に面倒になります。Malviyaのソリューションは素晴らしいですが、毎回使用できるわけではありません。どんな種類のプロパティでも、たとえばアルバムの写真の数など、より複雑なプロパティでもこれを解決する方法が必要です。私は通常、エンティティオブジェクトをそのまま残して、対応するエンティティへの参照を保持するか、またはエンティティオブジェクト自体から対応するプロパティを実装する余分なデータコンテナを作成することでこれを解決します。)を使用してエンティティからエンハンストコンテナにデータをコピーします。追加のプロパティを埋めるためのロジックは、通常、ファクトリ(またはファクトリメソッド)にあります。これはあなたのアーキテクチャに配置したい場所に依存します。現在のプロジェクトでは、クライアント側のデータアクセスファサードにそれらを含めています。データアクセスレイヤをあまりにも多くのDTOで混乱させたくないからです。これはもちろん、データアクセス層が追加のプロパティの取得をサポートする必要があることを意味します。album)ような操作。その利点は、データアクセス層の絶えず増大する契約のリスクを上回ることがわかりました。albumId)代わりに、上記の例のような多くの異なる呼び出しをサポートする必要があるかもしれません。これは、サービスコールの頻度の増加によるオーバーヘッドのために、いくつかのシナリオではパフォーマンス上の問題となる可能性があります。最後に、あなたのプロジェクトに最適なものを決める必要があります。)はそのままで、永続性、クライアントロジック、マッピングの間の懸念が明確に分離されているため、このアプローチが好きです。私はプレゼンテーションレイヤーのためのイメージパスだからプレゼンテーションレイヤーでそれを操作する必要があると思います。