【问题标题】:Memento implementation on .NET.NET 上的纪念品实现
【发布时间】:2008-11-12 16:10:52
【问题描述】:

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

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

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

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


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

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

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

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

【问题讨论】:

    标签: .net design-patterns memento


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果要持久化备忘录,请使用序列化方法

      否则,克隆对象就可以了

      【讨论】:

        【解决方案3】:

        称我为疯狂且效率低下,但我对 StringBuilder 和字符串执行我的操作。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2017-05-23
            • 2021-04-01
            • 2013-10-31
            • 2023-03-16
            • 2018-05-04
            • 2020-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多