У кого-нибудь есть идея, как сделать TValue, используя ссылку на исходные данные? В моем проекте сериализации я использую (как предложено в XML-Serialization ) универсальный сериализатор, который хранит TValues во внутренней древовидной структуре (аналогично MemberMap в примере).
Это дерево элементов также следует использовать для создания формы динамической настройки и манипулирования данными.
Моя идея состояла в том, чтобы определить свойство для данных:
TDataModel <T> = class
{...}
private
FData : TValue;
function GetData : T;
procedure SetData (Value : T);
public
property Data : T read GetData write SetData;
end;
Реализация методов GetData, SetData:
procedure TDataModel <T>.SetData (Value : T);
begin
FData := TValue.From <T> (Value);
end;
procedure TDataModel <T>.GetData : T;
begin
Result := FData.AsType <T>;
end;
К сожалению, метод TValue.From всегда создает копию исходных данных. Таким образом, всякий раз, когда приложение вносит изменения в данные, DataModel не обновляется, и, наоборот, если я изменяю свою DataModel в динамической форме, на исходные данные это не влияет.
Конечно, я всегда мог использовать свойство Data до и после изменения чего-либо, но так как я использую много Rtti внутри моей DataModel, я действительно не хочу делать это в любое время.
Возможно, у кого-то есть лучшее предложение?