Существует несколько подходов к редактированию объектов, когда требуется динамическое обновление связанных элементов в других представлениях. В качестве примера можно рассмотреть ГИС систему, в которой на карту требуется наносить точки с определенными атрибутами, главные из которых - это широта и долгота. В системе предусмотрено два вида отображения точек: в табличном списке и на карте ГИС. Редактирование точек можно производить при помощи дополнительного окна с детальной информацией по точке, а также с помощью перемещения точек непосредственно на карте. При этом, во всех представлениях должны динамически изменяться атрибуты. Возможные варианты редактирования:
- из окна редактирования без явной кнопки save (типа редактор свойств) или из карты. Объекты хранятся в памяти и всегда используются один указатель во всех представлениях. При изменении свойства объекта испускается сигнал об изменении, на который подписаны представления. Представления обновляются по этому сигналу. По сути это классический Model-View. Одна модель - много наблюдателей. В качестве модели выступает Point
- из окна редактирования точки с наличием кнопки save или из карты (save срабатывает при отпускании точки на карте). При хранении объектов в памяти динамическое обновление будет выполняться, но по кнопке save фиксация изменений может не пройти (например, запись в БД). В этом случае нужно по кнопке отмена откатить изменения. Соответственно, необходим клон объекта на момент начала редактирования, чтобы из него можно было восстановить начальное состояние.
- при работе с БД, ормом и passive view, когда на уровне представления хранятся только идентификаторы объектов и загруженные атрибуты. Очевидно, необходим дополнительный объект, который бы занимался оповещением объектов уровня представления. По событию обновления координат, обновлялись бы другие представления. При невозможности сохранения или отмене проводилось бы соответствующее оповещение.