Защитить бизнес-объект от изменений - PullRequest
2 голосов
/ 12 марта 2012

В моем приложении я храню свои бизнес-данные как огромный объект, содержащий множество мелких объектов, свойств и т. Д.

Для печати отчетов на основе этих данных я создал модуль печати. ​​

В модуле печати мне нужно получить доступ почти ко всем свойствам, подобъектам и полям, поэтому я передаю свой HugeObject в качестве параметра в модуль печати.

Проблема в том, что передаваемый HugeObject по ссылке может быть непреднамеренно изменен в модуле печати. ​​

Как защитить HugeObject от изменений?

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Для глубокого копирования всего объекта, сериализация и десериализация - хороший способ сделать это.Вы можете найти статью о CodeProject, которая описывает детали реализации.http://www.codeproject.com/Articles/23832/Implementing-Deep-Cloning-via-Serializing-objects

1 голос
/ 14 марта 2012

Даже для использования в модуле печати вам нужно почти все из HugeEntity. Я бы предложил создать специальный PrintableEntity и, используя специальный EntityToPrintableAdapter, вы можете адаптировать бизнес-объект к PrintableEntity.Таким образом, вы могли бы отделить модуль печати от сущностей бизнес-модуля, чтобы бизнес-объекты не просачивались в другие модули.Таким образом, даже в будущих требованиях для изменяемого объекта печати - ваш бизнес-уровень останется неизменным, и вам просто нужно обновить Adapter.

Если вы решите клонировать объект, см. этот SO пост , вот яТакже предоставлен DeepCopy() метод расширения с тестовым жгутом NUnit.

...