0

シリアライゼーションのための DataContracts の設計の 1 つの点で、私はかなり混乱しています。

オブジェクト (Customer など) があり、コレクション プロパティ (Addresses という名前の AddressCollection など) を公開するとします。フレームワークの設計ガイドラインでは、プロパティのパブリック ミューテーターを公開しないように規定されています。つまり、コレクション プロパティには get と no set が必要であり、代わりに public set メソッド (public void SetAddresses(IEnumerable< Address> addresses)) を使用する必要があります。

しかし、そのオブジェクトをシリアル化する必要があり、部分信頼環境になると予想される場合、適切に逆シリアル化できるように、パブリック セッターをプロパティに追加する必要がありますか?

さらに、シリアル化時にコレクションに何も含まれていない場合、デフォルトのコンストラクターは DataContractSerializer によって呼び出されないため、コレクションがまったく設定されておらず、null のままになっていると確信しています。OnSerializing 属性を使用してコレクションを初期化することもできますが、部分信頼シナリオではそのメソッドもパブリックにする必要がありますね。そして、それはさらに醜いです。

ここで適切なガイダンスを知っている人はいますか?

どうもありがとう。

4

2 に答える 2

1

そうです、それは実証済みであり、真の OO の考え方が新しいツールと出会うのです。:) 私はそれをDTO パターンの観点から考えるのが好きです。私は真のビジネス オブジェクトを可能な限りミューテーター フリーに近づけてセットアップし、シリアル化されるように設計された一連の DTO オブジェクト (パブリック プロパティ、空のコンストラクターなど) を使用します。これは理想的なソリューションではありませんが、非常にリッチなオブジェクト セットとシリアライゼーションを混在させようとすると、醜いものになる可能性があることがわかりました。それらを分離する方が良いです。

于 2009-04-14T00:50:27.950 に答える
0

ドメインモデルを本当に保護したい場合は、ソリューションにデータ転送オブジェクトを追加することを検討してください。そうすれば、必要なものだけをシリアル化し、ドメインを内部で操作できます。

于 2009-04-14T00:32:58.880 に答える