0

背景として、 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 に変換を行わせるように制限されているのでしょう。たぶん、サービス層にこのロジックをまったく実行させたくないはずです。たぶん、私のデザインは本当に恐ろしいので、この混乱に直面するべきではありません.

助けてください。すべてのフィードバックをお待ちしております。

4

3 に答える 3

2

怠惰な初期化のポイントは、リソースがいつ必要かどうかがわからないため、リソースの割り当てを延期することです。

あなたの場合、これは実際には意味がありません。画像がアップロードされるとすぐに、サーバーにサムネイルが必要になります。ユーザーは新しい画像をすぐに見たいと思っていますよね?したがって、サムネイルの作成を延期しても、ROIはプラスになりません。

于 2009-05-13T08:33:10.107 に答える
2

数か月前に、アップロードされた画像、サムネイルの生成、およびサムネイル画像を生成するコードをどこに置くべきかという問題について、非常によく似た問題がありました。私もこのコードがサービス レイヤーに属していると強く感じました (特に、画像ファイルとサムネイルのストレージがインターフェイスに抽象化され、IOC コンテナーを介して挿入され、ドメインに依存関係を挿入したくなかったためです)。層)。

最後に、UI コントローラーからサービス レイヤーへの呼び出しを介して画像がアップロードされた時点で、すべてのサムネイルを作成しました。ただし、この前にドメイン層で画像を生成しようとしました。これを行うために、ドメイン層が画像を生成する必要があるときに、サービス層に接続されたイベントを発生させるパターンを使用しました。次に、サービス層は、イベント引数を介してストレージ インターフェイスのインスタンスをドメイン層に戻し、ドメイン層がイメージを永続化できるようにしました。これは、 Udi Dahan のブログのいくつかのアイデアに非常に大まかに基づいています。サービス層でロジックを活用する方法として、ドメイン モデルでイベントを使用することについて知りました。残念ながら、Udi のサイトで参照を見つけることはできませんが、どこかにあります。いずれにせよ、それは本当に正しいとは感じませんでした.別のルートを介した密結合のように見えました. ただし、おそらくあなたの場合、ドメイン層からのイベントのアイデアを使用して、サービス層のロジックを呼び出すことができます。アイデア自体には多くの価値があると確信しています。

于 2009-05-13T08:25:06.657 に答える
0

IThumbnailingService画像を表示するには、必要に応じてサムネイルを生成し、生成された画像を指す有効な URI を返すによって渡される画像 URI が必要であると想定しています。

于 2009-05-13T08:02:29.843 に答える