4

MVVM アプリケーションのモデルであるクラス (人物) があります。このクラスを Azure テーブル ストレージに保存したいと考えています。Azure Table Storage に保存するには、TableServiceEntity というクラスから派生させる必要があります。ストレージ用の属性で素敵なクラスを散らかしたくないです(関心の分離を考えると良い考えのようです)。

オブジェクトをパラメーターとして受け取り、それをストレージに永続化するメソッド内で、実行時にクラスを TableServiceEntity から派生させることはできますか? これにより、クラスはストレージ属性をクリーンに保つことができますが、それでもテーブル ストレージに保存できます。

ありがとう!アンディ

4

6 に答える 6

2

実行時に継承を変更することはできません。

AutoMapperなどのツールを使用して、ドメイン オブジェクトから TableServiceEntity から派生したデータ ストレージ オブジェクトにマップすることができます。

Entity Framework Code First や NHibernate などの O/R マッパーの利点の 1 つは、特別な基本クラスからの派生を強制しないことです。

于 2012-07-20T03:44:05.740 に答える
1

DynamicObjectまたはCastleProxyを使用して、そのようなものをシミュレートできます。Personを紺碧に保存する代わりに、これらの手法の1つを使用してAzureEntityを作成し、Personとすべて同じプロパティを持つオブジェクトを生成できますが、それはTableServiceEntityから継承します。

TableServiceEntityのことは、使いやすさのためだけに行われます...ストレージクライアントライブラリのソースコード(私が覚えている限り、gitハブまたはcodeplexのどこかで公開されています)を手に入れて、使用せずに動作するように変更できます。 TableServiceEntityのもの。

コメントの更新: あなたの場合、両方を使用できます...違いは、expandoオブジェクトでは、拡張によってオブジェクトを定義するのに対し、動的オブジェクトは理解によって定義されることです。動的オブジェクトはもう少し強力です(そしてより複雑です)が、この場合はそれは必要ありません。ところで:Castle Proxyは動的オブジェクトのアプローチに非常に似ていますが、実行時に多くのコードを生成するため、動的オブジェクトまたはexpandoオブジェクトよりもはるかに優れたパフォーマンスを実現する可能性があります。

さらなる更新: expandoオブジェクトにこのようなインターフェースを実装させることができます。

于 2012-07-20T03:55:42.770 に答える
1

それが可能かどうかはまったくわかりませんが、可能性は低いです。PersonStorage クラスを作成して、単一の Person インスタンスで TableServiceEntity を継承するだけですか?

于 2012-07-20T03:50:33.507 に答える
1

残念ながら、いいえ: C# での継承はコンパイル時の概念であるため、オブジェクトはコンパイル時にその基本クラスから継承する必要があります。

「ストレージ用の属性でコードを乱雑にする」という点では、部分クラスが非常に役立ちます。ストレージ関連の属性を別のファイルに入れると、コードが再びきれいに見えます。

于 2012-07-20T03:43:13.400 に答える
1

PersonTableServiceEntityクラスと静的メソッドを作成して、PersonエンティティとPersonTableServiceEntity

于 2012-07-20T03:43:50.530 に答える
1

短い答え - いいえ。これはすべて、C# のコンパイル時に行われます。スリー

于 2012-07-20T03:44:45.990 に答える