In my application I keep my business data as a huge object containing a lot of small objects, properties etc.
To print reports based on this data I've created a printing module.
In printing module I need to access almost all of the properties, subobjects and fields thus I pass my HugeObject as a parameter to printing module.
The problem is that out HugeObject is being passed by reference can be unintentionally changed in printing module.
How to protect HugeObject from changes?