我已经看到了.NET上memento的两种不同实现。

一个非常简单-对象创建其自身的另一个实例。

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

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

顺便说一下,我有兴趣从资源使用/开发人员生产率的角度来看它。抱歉,我没有首先说明。

假设不需要保留纪念品,哪个是优先的?

从开发人员的工作效率来看,序列化会失败。对于任何对象而言,通用的几行代码比必须手动创建一个可能涉及 private 构造函数,字段分配等的克隆更为有效。

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

最佳答案

我认为,如何创建/存储memento的选择取决于您希望memento保留多长时间以及是否需要在appdomain之间传达该memento。如果内存仅存在很短时间并且仅由同一线程使用,则克隆对象是合理的。如果纪念品需要保留或传递给另一个应用程序域,则优先选择序列化。如果纪念品是长寿的,您甚至可能希望对其进行序列化并将其存储在外部(在文件或DB中)。

07-24 12:33