3

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

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

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

哪个是首选方法?谁能指出每种方法的优缺点?


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

假设 memento 不需要持久化,哪个是首选?

从开发人员生产力的角度来看,序列化胜出。对于任何对象来说,几行通用的代码比手动创建一个可能涉及私有构造函数、字段分配等的克隆更有效。

但话又说回来,也许连载很重——我不确定。

4

4 回答 4

2

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

于 2008-11-12T16:20:40.273 回答
0

如果要保留纪念品,请使用序列化方法

否则,克隆对象就可以了

于 2008-11-12T16:16:33.993 回答
0

叫我疯狂和低效,但我对 StringBuilder 和从字符串做我的。

于 2008-11-12T16:21:49.350 回答
0

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

否则,如果不需要保留纪念品,我看不到可以在两种方法之间进行选择的匹配项

于 2012-04-16T12:40:44.047 回答