проверить свойства двух объектов на предмет изменений - PullRequest
2 голосов
/ 16 июня 2010

Мне нужно разработать механизм проверки двух свойств объекта на предмет изменений.
Все свойства, которые необходимо проверить, помечены атрибутом.

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

В коде вызов рабочего класса выглядит следующим образом

    public void CreateHistoryMap(BaseEntity actual, BaseEntity old)
    {
        CreateHistoryMap(actualEntity, oldEntity)
                       .ForEach(mapEntry => CreateHistoryEntry(mapEntry),
                                mapEntry => IfChangesDetected(mapEntry));
    }

CreateHistoryMap создает HistoryMapEntry, который содержит два свойства.
CreateHistoryEntry создание объекта, который сохраняется в базе данных, IfChangesDetected проверка объекта на наличие изменений.

Мне приходится обрабатывать собственные специальные типы приложений для генерации значений истории в базе данных (например, конкатенации значений списка и т. Д.).

Моя проблема в том, что я должен прочитать значения свойств дважды
- для обнаружения изменений
- а для бетона CreateHistoryEntry

Как я могу устранить эту проблему или как реализовать сценарий отслеживания изменений с хорошими функциями c # 3.5?

Большое спасибо.

1 Ответ

1 голос
/ 16 июня 2010

Вы можете воспользоваться подходом, принятым средой CSLA.NET, которая включает в себя объекты, которые нельзя отменить (и отслеживание изменений свойств для привязки данных). Это очень чистая реализация, которая помещается в базовый класс ваших бизнес-объектов, чтобы получить выгоду, которую вы просто получаете.

Ссылка: http://www.lhotka.net/cslanet/

Этими классами являются BusinessBase и UndoableBase - вы также можете вырезать только код отслеживания изменений и оставить остальные - хотя CSLA.NET хорошо спроектирован, в бизнес-объекты встроено много логики.

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