Как продолжать получать события даже с измененными ссылками?
В проекте у меня есть следующая связь между BO (бизнес-объектом) и GUI
альтернативный текст http://lh5.ggpht.com/_1TPOP7DzY1E/TA9kkB1tNfI/AAAAAAAADOw/Myf_QBM3hS0/s800/Capture6.gif
Например, G
может представлять графику с временными линиями, C
кривой TimeLine, P
- точками этой кривой и T
временем, которое представляет каждую точку.
Каждый объект GUI связан с соответствующим объектом BO.
Когда T
изменяется GUI P
захватывает событие Changed
и меняет его местоположение.
Итак, когда G нужно изменить, он изменяет свои объекты внутренне, и в результате T изменяется, P перемещается, а GuiG визуально изменяется, все в порядке.
Но в этой архитектуре есть неудобство ... BO не следует создавать заново, потому что это нарушит связь между BO и GUIO.
В частности, GUI P всегда должен иметь одну и ту же ссылку на T.
Если в бизнес-логике я делаю, например, P1.T = new T(this.T + 10)
GUI_P1 больше не будет перемещаться, поскольку ожидает события от ссылки на прежний объект P1.T, который больше не принадлежит P1.
Таким образом, решение состояло в том, чтобы всегда модифицировать существующие объекты, а не создавать их заново. Но тут есть другое неудобство: производительность.
Допустим, у меня есть готовый newC
объект, который должен заменить старый. Вместо того, чтобы делать G1.C = newC
, я должен сделать foreach T в foreach P в C заменить на T из P из newC.
Есть ли другой, более оптимальный способ сделать это?