この質問は私が解決策を見つけようとしている1年以来のように私を眠らせませんが...それでも私の心には何も起こりませんでした。これは非常に一般的な問題だと思うので、おそらくあなたは私を助けることができます。
私はn層のアプリケーションを持っています:プレゼンテーション層、ビジネスロジック層、モデル層。簡単にするために、私のアプリケーションのプレゼンテーション層に、ユーザーが顧客を検索できるフォームが含まれているとします。これで、ユーザーはUIを介してフィルターに入力し、ボタンをクリックします。何かが起こり、リクエストはプレゼンテーション層に到着し、のようなメソッドになりCustomerSearch(CustomerFilter myFilter)
ます。このビジネスロジックレイヤーにより、シンプルになりました。モデルにクエリを作成し、結果を取得します。
さて、質問:データのロードの問題にどのように直面しますか?つまり、ビジネスロジック層は、その特定のメソッドがそのフォームだけで呼び出されることを認識していません。したがって、リクエストフォームに必要なのはCustomerオブジェクトだけなのか、LinkedOrderエンティティを持つCustomerオブジェクトだけなのかはわかりません。
私はもっとよく説明しようとしています。私たちのフォームは、名前で検索している顧客をリストしたいだけです。それは注文とは何の関係もありません。したがって、ビジネスロジッククエリは次のようになります。
(from c in ctx.CustomerSet
where c.Name.Contains(strQry) select c).ToList();
現在、これは正しく機能しています。2日後、上司から、他の顧客と同じように顧客を検索できるフォームを追加するように求められました。各顧客が作成した注文の総数を表示する必要があります。次に、そのクエリを再利用して、注文を添付(含む)してそれを取り戻すロジックを追加したいと思います。
このリクエストをどのように処理しますか?
これが私が今から持っていた最高の(私が思う)アイデアです。ご意見をお聞かせください。BLLのCustomerSearchメソッドはクエリを直接作成しませんが、次のようなObjectQueryを構成するプライベート拡張メソッドを通過します。
private ObjectQuery<Customer> SearchCustomers(this ObjectQuery<Customer> qry, CustomerFilter myFilter)
と
private ObjectQuery<Customer> IncludeOrders(this ObjectQuery<Customer> qry)
しかし、それは複雑すぎるように見えるので、これは私を納得させません。
ありがとう、マルコ