Если вы не можете скопировать данные и сравнить, тогда вам явно нужна какая-то запись того, что изменилось.Таким образом, вопрос заключается в том, как обновить эти записи.
Инструменты ORM могут (если они хотят) решить проблему, сохранив флаги в объектах, сообщая, были ли данные изменены или нет, и если да, то что,Звучит так, как будто вы делаете необработанные структуры данных доступными для приложения, а не объекты с аккуратно инкапсулированными мутаторами, которые могут обновлять флаги.
Так что ORM обычно не требует, чтобы приложения отслеживали изменения в каких-либо подробностях,Приложение обычно должно указывать, какой объект (ы) сохранить, но ORM затем решает, что необходимо сохранить в БД для этого, и может применить оптимизацию там.
Полагаю, это означает, что вВ соответствии с вашими терминами, ORM добавляет наблюдателей к структурам данных в некотором смысле.Это не внешний наблюдатель, это объект, который знает, как мутировать себя, но, конечно, есть некоторые накладные расходы для записи того, что изменилось.
Один из вариантов - предоставить «медленные» мутаторы для ваших структур данных, которые обновляютфлаги, а также «быстрый» прямой доступ и функция, помечающая объект как грязный.Тогда приложение будет выбирать, использовать ли потенциально более медленные мутаторы, которые позволяют ему игнорировать проблему, или потенциально более быстрые мутаторы, которые требуют, чтобы оно пометило объект как грязный до его запуска (или после его завершения, возможно, в зависимости от того, чтовы делаете о транзакциях и несовместимых промежуточных состояниях).
Тогда у вас будет две основные ситуации:
- Я зацикливаюсь на очень большом наборе объектов, условно делая одно изменениедля некоторых из них.Используйте «медленные» мутаторы для простоты приложения.
- Я делаю множество разных изменений в одном и том же объекте, и я действительно беспокоюсь о производительности средств доступа.Используйте «быстрые» мутаторы, которые, возможно, напрямую выставляют некоторый массив в данные.Вы получаете производительность в обмен на знание дополнительной информации о модели персистентности.
В компьютерных науках есть только две серьезные проблемы: аннулирование кэша и присвоение имен.
Фил Карлтон