保护业务对象免受更改

时间:2012-03-12 10:35:18

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

在我的应用程序中,我将业务数据保存为包含大量小对象,属性等的大对象。

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

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

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

如何保护HugeObject免受更改?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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