Атрибуты пользовательских свойств C # и ASP.NET и определение, изменились ли свойства - PullRequest
2 голосов
/ 21 декабря 2010

Я работаю над проектом, в котором мы хотим сохранить историю конкретного объекта.При сохранении я хочу метод для объекта, который определит, изменился ли он, чтобы я мог вызвать метод для сохранения его текущего состояния в истории.Например, я заполняю форму из объекта, пользователь вносит изменения (или, возможно, нет) и отправляет из.Я хочу взять свой исходный объект и копию этого объекта, который был обновлен из формы, и определить, изменился ли он вообще.Кроме того, в какой-то момент я могу решить, что определенные свойства не имеют значения (например, если имя меняется, я не буду его отслеживать).

Я думаю, что самый простой / гибкий способ сделать это будет, если ямог бы дать свойства, которые мне нужны, для пользовательского атрибута [ChangeTracked], а затем я мог бы использовать отражение, чтобы получить список всех свойств с этим атрибутом и просмотреть их, сравнивая A.property == B.property, чтобы определить, изменились ли они.1003 *

Будет ли это работать?Существует ли значительно лучший / более простой способ справиться с этим, например какой-то встроенный метод, который можно добавить к объекту, чтобы определить, изменились ли значения каких-либо свойств?Безотносительно решения был бы оценен некоторый псевдо-код.Точно так же, как пояснение, решение должно определить, действительно ли изменилось значение, которое меня интересует, а не только то, было ли оно присвоено с момента его создания, т.е. если я установил Name = "bob", и оно уже было "bob" до моего назначенияэто не считается изменением.

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Это не фантастика, но это проверенный и настоящий метод грубой силы.Просто добавьте частное свойство к объекту с именем IsDirty.Для свойств, которые вы хотите отслеживать, просто добавьте IsDirty = True в свойство Set подпрограммы.Для более сложных правил «Мне все равно» просто закодируйте их в наборе свойств.

Событие click кнопки страницы может вызвать событие Save, которое записывает все значения из текстовых полей и раскрывающихся списков в свойства объекта, затемвызывает метод Save объекта, который проверяет свойство IsDirty перед выполнением каких-либо действий.

0 голосов
/ 21 декабря 2010

Один из возможных способов - добавить глубокую копию объекта в качестве частного свойства объекта при его загрузке.( Один метод глубокого копирования )

При сохранении вы можете сравнить объект копирования с вашим "живым" объектом, чтобы увидеть, произошли ли какие-либо изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...