3

.NET での memento の 2 つの異なる実装を見てきました。

1 つは非常に単純です。オブジェクトはそれ自体の別のインスタンスを作成します。

もう 1 つは、BinaryFormatter と MemoryStream を使用してオブジェクトをシリアル化することです。

好ましい方法はどれですか? 誰でも各アプローチの長所/短所を指摘できますか?


ところで、リソースの使用状況/開発者の生産性の観点から見てみたいと思います。最初にそれを述べなかったことをお詫びします。

記念品を永続化する必要がないと仮定すると、どちらが優先されますか?

開発者の生産性の観点からは、シリアライゼーションが圧倒的に有利です。プライベート コンストラクターやフィールド割り当てなどを含む可能性のあるクローンを手動で作成するよりも、任意のオブジェクトに対して一般的な数行を作成する方が効率的です。

しかし、繰り返しになりますが、シリアライゼーションは重いかもしれません - 私は確信が持てません。

4

4 に答える 4

2

記念品を作成/保存する方法の選択は、記念品をどれだけの期間保持したいか、およびその記念品をアプリドメイン間で通信する必要があるかどうかによって異なると思います。memento が短期間しか存在せず、同じスレッドによってのみ使用される場合は、複製されたオブジェクトが適切です。記念品を永続化するか、別のアプリドメインに渡す必要がある場合は、シリアル化が優先されます。記念品の寿命が長い場合は、シリアル化して外部に (ファイルまたは DB に) 保存することもできます。

于 2008-11-12T16:20:40.273 に答える
0

多くの場合、BinaryFormatter と MemoryStream は多くのコードを書かなくても機能しますが、Clone() は各クラスにコードを追加する必要があります。

それ以外の場合、記念品を永続化する必要がない場合、2つの方法のどちらかを選択する一致が見られません

于 2012-04-16T12:40:44.047 に答える
0

私はクレイジーで非効率的だと呼んでいますが、私は StringBuilder と文字列から私をやっています。

于 2008-11-12T16:21:49.350 に答える
0

記念品を永続化する場合は、シリアル化メソッドを使用してください

それ以外の場合は、複製されたオブジェクトで問題ありません

于 2008-11-12T16:16:33.993 に答える