一个简单的Delphi框架-xDom-1 内存对象

本文介绍了一个基于DesignOne模板技术设计的Delphi框架-xDOM,该框架包含对象层、存储层和显示层。核心组件包括TBaseObject、TBaseObjectList、TController等,支持数据对象管理、快速排序、搜索等功能。提供了数据模型设计的完整代码示例。
摘要由CSDN通过智能技术生成

从现在开始,着手实现一个简单而实用的Delphi框架-xDOM,这个框架准备具备以下几个特色:

1 基于DesignOne模板技术设计

2 分层设计,暂时分为对象层,存储层,显示层!

3 完整设计,理想情况下,数据模型设计完成,相应的初始完整代码也能够完成!

4 命名为:xDOM-X Delphi Object Model

 

 

基于上述目标,首先实现对象层代码如下:

  1. {*******************************************************}
  2. //
  3. //   对象模板:完成数据在内存中的组织(基于DesignOne创建)
  4. //   其中: TBaseObject是所有数据对象的基类
  5. //         TBaseObjectList是所有数据对象集合的基类,数据对象集合负责数据对象的管理,支持快速排序和搜索
  6. //         TController是一个事件控制器,负责操作完成后的通知
  7. //         TControllers对多个TController进行管理,以完成事件的多路通知
  8. //         TDataFlow负责数据流的多步处理
  9. //         TModelData负责完成以上各对象的初始化,提供一个数据对象的入口点,
  10. //                   系统一般从实例化类的对象开始
  11. //
  12. {*******************************************************}
  13. unit ModelObject;
  14. interface
  15. uses
  16.   Classes,Sysutils,Windows;
  17. type
  18.   TFilteredList = array of Integer;
  19.   TSortedList = array of Integer;
  20.   TSortedList2 = array of TSortedList;
  21.   TFilterOperation = (foMore,foMoreandEqual,foLess,foLessandEqual,foEqual,foNotEqual,foLike);
  22.   TSortType = (stUp,stDown);
  23.   TFilterShip =(fsAnd,fsOr);
  24. type
  25.   TPropertyIdent=class
  26.     Ident:Integer;
  27.   end;
  28.   TFilterParams=class(TPropertyIdent)
  29.   public
  30.     Operation :TFilterOperation;
  31.     Ship:TFilterShip;
  32.     Value:Variant;
  33.   end;
  34.   TSortParams=class(TPropertyIdent)
  35.   public
  36.     SortType:TSortType;
  37.   end;
  38. type
  39.   TBaseObject =class;
  40.   TBaseObjectList=class;
  41.   TBaseObject =class
  42.   private
  43.     FObjectType: integer;
  44.     FAction: Integer;
  45.     FChangedNotify :boolean;
  46.     FObserverlist:TList;
  47.     procedure NotifyObserver(PropertyIdent:integer);   //发出更改通知
  48.   public
  49.     constructor create;
  50.     destructor Destroy;override;
  51.     procedure  Attach(AObserver:TBaseObjectList);
  52.     procedure  Detach(AObserver:TBaseObjectList);
  53.     property ObjectType : integer read FObjectType write FObjectType;
  54.     property Action     :Integer read FAction write FAction;
  55.     property ChangedNotify :boolean read FChangedNotify   write FChangedNotify  default True;
  56.   end;
  57.   TBaseObjectList=class
  58.   private
  59.     FList:TList;
  60.     FFilterParamList: TList;
  61.     FSortParamList: TList;
  62.     function  Compare(AParams:TSortParams;ADataObject1,ADataObject2:pointer):Integer;
  63.     function  Equal(AParams:TSortParams;ADataObject1,ADataObject2:pointer):Boolean;
  64.     procedure QuickSort(AParams:TSortParams;L, R: Integer;SortList: TSortedList);
  65.     function  Filter2By(AShip:TFilterShip;AFilters1, AFilters2:TFilteredList):TFilteredList;
  66.     function  DefaultFilterResult: TFilteredList;
  67.   protected
  68.     procedure GetCompareValue(AParams: TFilterParams;ADataObject:pointer;
  69.                        var datavalue,paramvalue:Variant);overload;virtual;abstract;
  70.     procedure GetCompareValue(AParams: TSortParams;ADataObject1,ADataObject2:pointer;
  71.                        var datavalue1,datavalue2:Variant);overload;virtual;abstract;
  72.   public
  73.     constructor create;
  74.     destructor Destroy;override;
  75.     procedure Update(AObject:TBaseObject;PropertyIdent:integer);virtual;abstract;
  76.     function FiltersBy(AParamsList: TList): TFilteredList;   //搜索
  77.     function FilterBy(AParams:TFilterParams):TFilteredList;
  78.     function Sortsby(ASortParamsList: TList;AFilters:TFilteredList):TSortedList; //快速排序
  79.     function Sortby(ASortParams: TSortParams;AFilters:TFilteredList):TSortedList;
  80.     property  FilterParamList:TList read FFilterParamList; //搜索参数列表,装载TFilterParams类型的参数
  81.     property  SortParamList:TList read FSortParamList;     //排序参数列表,装载TSortParams类型的参数
  82.   end;
  83. const
  84.   PropertyOffset =1000;
  85. //对象,对象属性唯一标识符
  86. {DesignOne}
  87. {CodeTemplate}
  88. {<Object ObjectMapType=AllObjects>
  89.   dot_[Objectname] = [ObjectIndex];   //[ObjectDisplayName]
  90.    <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  91.    dpt_[Objectname][PropertyName] =[ObjectIndex]*PropertyOffset+[PropertyIndex]; //[PropertyDisplayName]
  92.    </Property>
  93.  </Object>}
  94. {/CodeTemplate}
  95. {/DesignOne}
  96. type
  97. {DesignOne}
  98. {CodeTemplate}
  99. {<Object ObjectMapType=AllObjects>
  100.   T[Objectname] = class;
  101.   T[Objectname]List = class;
  102.  </Object>}
  103. {/CodeTemplate}
  104. {/DesignOne}
  105.   TDataFlow =class;
  106.   TController =class;
  107.   TControllers =class(TList)
  108.   public
  109.     destructor Destroy; override;
  110.   end;
  111. {DesignOne}
  112. {CodeTemplate}
  113. {<Object ObjectMapType=AllObjects>
  114.   T[Objectname] = class(TBaseObject)  //[ObjectDisplayName]
  115.   private
  116.    <ObjectShip ObjectShipMapType=ParentObjects ObjectName=[ObjectName]>
  117.    f[ObjectShipName] : T[ObjectShipName];  //[ObjectShipDisplayName]
  118.    </ObjectShip>
  119.    <ObjectShip ObjectShipMapType=ChildObjects ObjectName=[ObjectName]>
  120.    f[ObjectShipName]List : T[ObjectShipName]List;  //[ObjectShipDisplayName]
  121.    </ObjectShip>
  122.    <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  123.    f[Propertyname] : [VarType];
  124.    </Property>
  125.    <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  126.    procedure Set[Propertyname](const Value : [VarType]);
  127.    </Property>
  128.   public
  129.     constructor create;
  130.     destructor Destroy;override;
  131.     procedure Cloneto(ADest:T[Objectname];ADeepClone:Boolean);
  132.     function GetDataBuffer(var ABuffer: PChar; var len: integer): Boolean;
  133.     function GetDataObject(ABuffer: PChar): Boolean;
  134.     <ObjectShip ObjectShipMapType=ParentObjects ObjectName=[ObjectName]>
  135.     property [ObjectShipName] : T[ObjectShipName] read f[ObjectShipName] write f[ObjectShipName]; //[ObjectShipDisplayName]
  136.    </ObjectShip>
  137.    <ObjectShip ObjectShipMapType=ChildObjects ObjectName=[ObjectName]>
  138.     property [ObjectShipName]List : T[ObjectShipName]List read f[ObjectShipName]List;  //[ObjectShipDisplayName]
  139.    </ObjectShip>
  140.     <Property PropertyMapType=AllPropertys ObjectName=[ObjectName]>
  141.     property [Propertyname] : [VarType] read f[Propertyname] write Set[Propertyname];  //[PropertyDisplayName]
  142.     </Property>
  143.    end;
  144.    TOnInsert[ObjectName]Event   =procedure(index:integer;AData: T[ObjectName]) of Object;
  145.    TOnAdd[ObjectName]Event   =procedure(AData: T[ObjectName]) of Object;
  146.    TOnDelete[ObjectName]Event=procedure(AData: T[ObjectName]) of Object;
  147.    TOnChange[ObjectName]Event=procedure(AData: T[ObjectName]) of Object;
  148.     T[ObjectName]List=class(TBaseObjectList)
  149.     private
  150.       FDataFlow:TDataFlow;
  151.       FControllers : TControllers;
  152.       FAdd[ObjectName]Event: TOnAdd[ObjectName]Event;
  153.       FChange[ObjectName]Event: TOnChange[ObjectName]Event;
  154.       FDelete[ObjectName]Event: TOnDelete[ObjectName]Event;
  155.       FInsert[ObjectName]Event: TOnInsert[ObjectName]Event;
  156.       function GetCount: integer;
  157.       function GetItems(index: integer): T[ObjectName];
  158.       procedure SetItems(index: integer; const Value: T[ObjectName]);
  159.       procedure SetDataFlow(const Value: TDataFlow);
  160.       procedure SetControllers(const Value: TControllers);
  161.     protected
  162.       procedure GetCompareValue(AParams: TFilterParams;ADataObject:pointer;
  163.                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值