元のデータへの参照を使用して 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 プロパティを使用できますが、DataModel 内で多くの Rtti を使用するため、いつでもこれを実行したくありません。
おそらく誰かがより良い提案をしていますか?