.NET上的Memento实现

时间:2008-11-12 16:10:52

标签: .net design-patterns memento

我在.NET上看过两种不同的memento实现。

一个非常简单 - 该对象创建了自己的另一个实例。

另一个是使用BinaryFormatter和MemoryStream序列化对象。

哪种方法首选?任何人都能指出每种方法的优点/缺点吗?


顺便说一句,我有兴趣从资源使用/开发人员生产力的角度来看待它。我为没有先说明而道歉。

假设纪念品不需要保留,这是首选吗?

从开发人员的生产力角度来看,序列化获胜。对于任何对象来说,通用的几行比必须手动创建可能包含私有构造函数,字段赋值等的克隆更有效。

但话说回来,也许序列化很重 - 我不确定。

4 个答案:

答案 0 :(得分:2)

我认为如何创建/存储纪念品的选择取决于您希望纪念品持续多久,以及您是否需要跨应用程序域传达该纪念品。如果纪念品只存在很短的时间并且只由同一个线程使用,那么克隆的对象是合理的。如果需要将纪念品保留或传递给另一个应用程序域,则首选序列化。如果纪念品很长,您甚至可能想要将其序列化并将其存储在外部(在文件或数据库中)。

答案 1 :(得分:0)

如果你要坚持纪念品,请使用序列化方法

否则,克隆的对象很好

答案 2 :(得分:0)

叫我疯狂而且效率低下,但我选择使用StringBuilder和字符串。

答案 3 :(得分:0)

BinaryFormatter和MemoryStream通常无需编写大量代码即可运行,但Clone()需要将代码添加到每个类中。

否则如果纪念品不需要保留,我不会在两种方法之间选择匹配