一个简单的Delphi框架-xDom-2 文件存储

 受益于对象层的灵活,文件存储变的比较简单!

以下是文件存储的实现代码

 

模型文件下载地址

 

http://www.onewone.com/designone/xDOM.dom

 

  1. {*******************************************************}
  2. //
  3. //   文件存储模板:以流的形式存储数据
  4. //   特点:1 受益于对象模型的灵活,使得文件的存储实现变的非常简单
  5. //        2 支持部分加载
  6. //        3 采用类方法的方式,即有比较好的结构性,也省去了对象的创建和销毁的开销
  7. //
  8. {*******************************************************}
  9. unit ModelFile;
  10. interface
  11. uses
  12.   classes,
  13.   ModelObject;
  14. type
  15. {DesignOne}
  16. {CodeTemplate}
  17. {<Object ObjectMapType=AllObjects>
  18.   T[ObjectName]File=class
  19.   public
  20.     class function Load(ADataList:T[ObjectName]List;Reader:TReader;ALoadChild:boolean):boolean;
  21.     class function Save(ADataList:T[ObjectName]List;Writer:TWriter;ASaveChild:boolean):boolean;
  22.     class function LoadChild(Reader: TReader;AData: T[ObjectName];ALoadChild:boolean): boolean;
  23.     class function SaveChild(Writer: TWriter;AData: T[ObjectName];ASaveChild:boolean): boolean;
  24.   end;
  25.  </Object>}
  26. {/CodeTemplate}
  27. {/DesignOne}
  28.   TModelFile = class
  29.     class function Load(AModelData:TModelData;Reader:TReader;ALoadChild:boolean):boolean;
  30.     class function Save(AModelData:TModelData;Writer:TWriter;ASaveChild:boolean):boolean;
  31.   end;
  32. implementation
  33. {DesignOne}
  34. {CodeTemplate}
  35. {<Object ObjectMapType=AllObjects>
  36. class function T[ObjectName]File.Load(ADataList: T[ObjectName]List;
  37.   Reader: TReader;ALoadChild: boolean): boolean;
  38. var
  39.   Data : T[ObjectName];
  40.   i:Integer;
  41.   MaxCount : integer;
  42. begin
  43.   Result := False;
  44.   ADataList.ClearList;
  45.   MaxCount := Reader.ReadInteger;
  46.   for i := 0 to MaxCount-1 do
  47.   begin
  48.     Data := T[ObjectName].create;
  49.     with Data,Reader do begin
  50.      <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  51.      [PropertyName] := Read[VarTypeForFile];
  52.      </Property>
  53.     end;
  54.     ADataList.Add[ObjectName](Data);
  55.     if ALoadChild then T[ObjectName]File.LoadChild(Reader,Data,ALoadChild);
  56.   end;
  57.   Result := True;
  58. end;
  59. class function T[ObjectName]File.LoadChild(Reader: TReader; AData: T[ObjectName];
  60.    ALoadChild: boolean): boolean;
  61. var
  62.   j:integer;
  63. begin
  64.   Result := False;
  65.    <ObjectShip ObjectShipMapType=ChildObjects ObjectName=[ObjectName]>
  66.     T[ObjectShipName]File.Load(AData.[ObjectShipName]List,Reader,ALoadChild);
  67.     for j := 0 to AData.[ObjectShipName]List.Count-1 do AData.[ObjectShipName]List.Items[j].[ObjectName] := AData;
  68.     </ObjectShip>
  69.   Result := True;
  70. end;
  71. class function T[ObjectName]File.Save(ADataList: T[ObjectName]List;
  72.   Writer: TWriter;ASaveChild: boolean): boolean;
  73. var
  74.   Data : T[ObjectName];
  75.   i:Integer;
  76. begin
  77.   Result := False;
  78.   Writer.WriteInteger(ADataList.Count);
  79.   for i := 0 to ADataList.Count-1 do
  80.   begin
  81.     Data := ADataList.Items[i];
  82.     with Data,Writer do begin
  83.      <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  84.      Write[VarTypeForFile]([PropertyName]);
  85.      </Property>
  86.     end;
  87.     if ASaveChild then T[ObjectName]File.SaveChild(Writer,Data,ASaveChild);
  88.   end;
  89.   Result := True;
  90. end;
  91. class function T[ObjectName]File.SaveChild(Writer: TWriter; AData: T[ObjectName];
  92.   ASaveChild: boolean): boolean;
  93. begin
  94.   Result := False;
  95.    <ObjectShip ObjectShipMapType=ChildObjects ObjectName=[ObjectName]>
  96.     T[ObjectShipName]File.Save(AData.[ObjectShipName]List,Writer,ASaveChild);
  97.    </ObjectShip>
  98.   Result := True;
  99. end;
  100.  </Object>}
  101. {/CodeTemplate}
  102. {/DesignOne}
  103. class function TModelFile.Load(AModelData: TModelData;Reader: TReader; ALoadChild: boolean): boolean;
  104. begin
  105. {DesignOne}
  106. {CodeTemplate}
  107. {<Object ObjectMapType=TopObjects>
  108.   T[ObjectName]File.Load(AModelData.[ObjectName]List,Reader,ALoadChild);
  109.  </Object>}
  110. {/CodeTemplate}
  111. {/DesignOne}
  112. end;
  113. class function TModelFile.Save(AModelData: TModelData;Writer: TWriter; ASaveChild: boolean): boolean;
  114. begin
  115. {DesignOne}
  116. {CodeTemplate}
  117. {<Object ObjectMapType=TopObjects>
  118.   T[ObjectName]File.Save(AModelData.[ObjectName]List,Writer,ASaveChild);
  119.  </Object>}
  120. {/CodeTemplate}
  121. {/DesignOne}
  122. end;
  123. end.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值