【问题标题】:Protect business object from changes保护业务对象免受更改
【发布时间】:2012-03-28 18:12:21
【问题描述】:

在我的应用程序中,我将业务数据保存为一个巨大的对象,其中包含许多小对象、属性等。

为了根据这些数据打印报告,我创建了一个打印模块。

在打印模块中,我需要访问几乎所有的属性、子对象和字段,因此我将 HugeObject 作为参数传递给打印模块。

问题是通过引用传递的HugeObject可能会在打印模块中被无意更改。

如何保护 HugeObject 免受更改?

【问题讨论】:

    标签: c# .net design-patterns architecture c#-2.0


    【解决方案1】:

    即使您几乎需要 HugeEntity 中的所有内容才能在打印模块中使用,我建议创建一个特殊的 PrintableEntity 并使用特殊的 EntityToPrintableAdapter,您可以将业务实体调整为 PrintableEntity。通过这种方式,您可以将打印模块与业务模块实体分离,这样业务实体就不会泄漏到其他模块中。因此,即使将来对可打印实体的要求发生变化 - 您的业务层保持不变,您只需要更新适配器。

    如果您决定克隆对象,请参阅 this SO post,这里是我提供的带有 NUnit 测试工具的 DeepCopy() 扩展方法。

    【讨论】:

      【解决方案2】:

      要深度复制整个对象,序列化和反序列化是一种很好的方法。您可以在 CodeProject 上找到一篇文章,其中描述了实现细节。 http://www.codeproject.com/Articles/23832/Implementing-Deep-Cloning-via-Serializing-objects

      【讨论】:

        猜你喜欢
        • 2017-11-27
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多