2009-03-25 8 views
2

私は遅延ロードパターンを使って完全にロードするか、遅延ロードすることができるDTOを持っています。ロード方法は、Flexアプリケーションに必要なものによって異なります。ただし、このDTOはFlexアプリケーション(swf)に送信されます。通常、コレクションは呼び出されたときにのみロードされます。しかし、私の場合、コレクションはFlexでのみ呼び出されるため、.NET側での実装は明らかにこの場合は機能しません(Flexがサーバー呼び出しを行う場合を除き...私が避けたいもの)。ゲッターを何にも割り当てずに呼び出す(レイジーローディング)

コレクションのゲッターでは、データがデータベースから取得されます。もし私がASP.NETページで作業しているのであれば、動作しますが、DTOがFlexに送られた場合は動作しません。

あなたはこれにどのように対処しますか?私はFlexにDTOを送る前にgetterを呼び出すことができますが、それはひどいようです... + getterを呼び出すことは、何かに割り当てられている場合にのみ行うことができます(そして、コレクションを保持するローカル変数は決して使用されません... )。

答えて

1

おそらく、そのクラスのためのメソッドと、おそらく、そのクラスのさまざまなコレクションのためのFinalizeAll拡張メソッドを導入するでしょう。このメソッドは、クラスのパブリックプロパティですべてのゲッターを参照してロードしていることを確認するだけです。オブジェクトをFlexアプリケーションに送信する前に、Finalize(またはFinalizeAll)を呼び出します。これをインターフェイスにして、オブジェクトを転送する前にファイナライズの必要性をテストし、各クラスを個別にチェックするのではなくインターフェイスのテストに基づいてメソッドを呼び出すこともできます。

注:Finalizeは頭に浮かぶ最初の名前です。これにはより良い名前が(おそらく)あるかもしれません。

+0

EagerLoadまたはLoadは、関数の名前を考えたものです。私たちは同じ方法で、方法がうまくいくという結論に達しました。 –

+0

変数に代入することなくこのFinalizeメソッドでゲッターを呼び出す方法はありますか? –

+0

私は反射を使わないとそうは思わない。しかし、リファクタは、ゲッターにプロパティを設定するメソッドを呼び出し、Finalizeメソッドでこの同じメソッドを呼び出すようにすることができます。おそらく反射を使用するようにこれをリファクタリングして、すべてのプロパティで使用できるようにします。 – tvanfosson

2

扶養家族をロードする方法(loadDependencies)を導入することができます。このメソッドは、ワイヤを介して(Flexに)送信される前にDTOオブジェクトのすべての遅延読み込みを行う必要があります。このメソッドをインタフェースに抽象化して、異なるDTO間でそのようなプロセスを合理化することができます。このメソッドの中で記述したように、getterを使用することに対しては何もありません。

関連する問題