2008-08-30 11 views
6

ドメインモデルをWCFサービスAPIにプッシュすることを検討しています。このタイプの設定で遅延読み込みテクニックについていくつか考えてみたかったのです。WCFサービスドメインモデルを使用した遅延ロード?

このアプローチをとる際の提案はありますか?私はサーバがロードされた...このように積極的なロード怠惰なことになっている各プロパティの取得に当たる私のリストを返す直前に、私のアプリにこの技術および手順を実装し


。この問題について説明したり解決策を提案したりできますか?

編集:それはappearsそれがシリアル化中に見れませんので、あなたがXMLIgnore属性を使用することができます。..まだ任意のリモート処理アーキテクチャについては、このかかわら

答えて

3

上に読んで、あなたはロードaを避けたいでしょう完全なオブジェクトグラフを「無制限にワイヤーダウン」します(ただし、オブジェクトの数が非常に少ない場合を除く)。

Wikipedia articleには、非常に要約された標準的なテクニックがあります(C#も同様です)。私はゴーストとバリューホルダーの両方を使用しており、かなりうまく動作します。

この種の技術を実装するには、懸念事項を厳密に区別してください。サーバーでは、サービスコントラクト実装クラスは、データコントラクトで動作するコードの唯一のビットである必要があります。クライアントでは、サービスアクセスレイヤーはプロキシと連携する唯一のコードである必要があります。

このようにレイヤードすると、サービスを呼び出すUIレイヤーと呼び出されているビジネス層から比較的独立してサービスが実装される方法を調整できます。また、ユニットテストの半分のチャンスを与えます!

4

サービスインターフェイスで遅延ロードを実行しないでください。明示的なDTOを定義し、それらをWCFのデータコントラクトとして使用します。

NHibernate(または他のORM)を使用して、DTOを構築する必要があるオブジェクトを適切に取得できます。

+0

私はado.netの世界で立ち往生しています...あなたが言及したこのアプローチのサンプルを提供する可能性はありますか? –

+1

基本的には、IListまたはICollectionを継承するProxyCollectionを作成する必要があります。これは、アイテムをロードするコマンドを追跡できる必要があります。いずれかのメンバーにアクセスしたら、まずコマンドを実行してリストを作成します。 –

1

RESTベースのもの(例:ADO.NET Data Services)を使用して、クライアントコードにtransparientlyラップすることができます。

関連する問題