unit Myc.Trade.DataServer; interface uses System.SysUtils, System.Generics.Collections, Myc.Lazy, Myc.Trade.DataPoint, Myc.Trade.DataSeries; type IDataProvider = interface ['{B2A9996C-724B-4416-A882-595B7E58066D}'] procedure Fetch; end; IDataServer = interface ['{A6E246A2-E84E-49AB-A63E-333E561E488C}'] function GetData: TMutable>; function GetIsLiveData: TMutable; property Data: TMutable> read GetData; property IsLiveData: TMutable read GetIsLiveData; end; TDataServer = class(TInterfacedObject, IDataServer, IDataProvider) protected function GetData: TMutable>; virtual; abstract; function GetIsLiveData: TMutable; virtual; abstract; procedure Fetch; virtual; abstract; end; IDataServerNode = interface ['{DA3531F1-158E-4A63-8E5A-34089C537B1B}'] function CreateDataServer: IDataServer; end; TDataServerNode = class(TInterfacedObject, IDataServerNode) public // Factory method to create the actual data server instance. function CreateDataServer: IDataServer; virtual; abstract; end; TFileStreamServerNode = class(TDataServerNode) end; implementation end.