背景として、 Rob Conery の Storefrontモデルに大まかに基づいたデータ レイヤーとサービス レイヤーがあり、Rob のように、私のドメイン オブジェクトの多くは と でチェーンされておりLazyList<>、LazyItem<>Linq2Sql が提供する遅延実行をLazy*利用しています。この素晴らしいデリゲート アプローチIQueryable<T>ではなく。
だから私はこのようなオブジェクトグラフを持っています(基本的に、各アクティビティには多くの画像のフォトギャラリーが必要です-サムネイルとフルサイズの写真):
latest3Activities[0].Gallery.Images.Inner[1].FullImage
型にはGalleryImages プロパティがあるLazyList<PhotoGalleryImage>ため、IList<PhotoGalleryImage>その LazyList が表示されInnerます。各PhotoGalleryImageアイテムには、FullImageプロパティとThumbnailプロパティがあり、両方ともタイプがImageです。
rez でアップロードされた完全な写真がPhotoGalleryImage.FullImageプロパティに保存され、最初はThumbnailプロパティがNull. 私が求めているのは次のとおりです。Thumbnailプロパティに初めてアクセスしたときにNull、サービス レイヤーで Thumb を生成し、それを DB に永続化してから、Image小さい写真であるインスタンスを返します。フルサイズの画像からサムネイルを作成するためのすべてのコードがあるので、ここでは問題にしません。
私が理解できないのは、Thumbnail(私のアーキテクチャコンテキストで) プロパティの最初のアクセスをキャッチしIQueryable<>、リポジトリ (DAL) ではなくサービス層にサイズ変更をさせる方法です。サービス (ビジネス) レイヤーがこの機能の決定に責任を負うべきだと強く感じていますが、それを機能させる方法がわかりません。
現在、リポジトリ内のドメイン クラスから Linq2Sql クラスへのマッピングは、私が参照するこの「最初のアクセス」を識別するのに適した場所になると考えていますが、下位層がサービスを呼び出す方法がわかりません。レイヤーを作成してシュリンクを実行します (または、シュリンクが可能である場合でも、シュリンクを実行する必要があります)。
たぶん、私の設計により、Repos に変換を行わせるように制限されているのでしょう。たぶん、サービス層にこのロジックをまったく実行させたくないはずです。たぶん、私のデザインは本当に恐ろしいので、この混乱に直面するべきではありません.
助けてください。すべてのフィードバックをお待ちしております。