我已经看到了.NET上memento的两种不同实现。
一个非常简单-对象创建其自身的另一个实例。
另一种是使用BinaryFormatter和MemoryStream序列化对象。
首选方法是?谁能指出每种方法的优点/缺点?
顺便说一下,我有兴趣从资源使用/开发人员生产率的角度来看它。抱歉,我没有首先说明。
假设不需要保留纪念品,哪个是优先的?
从开发人员的工作效率来看,序列化会失败。对于任何对象而言,通用的几行代码比必须手动创建一个可能涉及 private 构造函数,字段分配等的克隆更为有效。
但是话又说回来,也许序列化很重-我不确定。
最佳答案
我认为,如何创建/存储memento的选择取决于您希望memento保留多长时间以及是否需要在appdomain之间传达该memento。如果内存仅存在很短时间并且仅由同一线程使用,则克隆对象是合理的。如果纪念品需要保留或传递给另一个应用程序域,则优先选择序列化。如果纪念品是长寿的,您甚至可能希望对其进行序列化并将其存储在外部(在文件或DB中)。