论DELPHI三层的数据序列格式的变化

要窥三层的数据序列格式,我们可以通过观察DELPHI官方的客户端内存表。

早先流行的是TClientDataSet,它的Data和Delta属性的数据类型都是:OleVariant。

OleVariant其实是微软公司为COM和COM+战略定义的统一的数据序列格式。

早年DELPHI的三层架构就是建立在COM的基础之上的,数据序列自然也就使用OleVariant。

随着软件COM战略的失败,微软公司已经放弃COM战略,现在改为.NET战略了。

DELPHI随之也改变了三层的架构,推出了全新的三层框架:DATASNAP。

全新的FireDac数据引擎,这是一个跨平台的引擎。

相应的客户端内存表,现在主推FDMemTable,它的Data和Delta属性的数据类型都是:IFDDataSetReference。

property Data: IFDDataSetReference read GetData write SetData;
property Delta: IFDDataSetReference read GetDelta;

IFDDataSetReference居然是一个接口类型,这是许多人第一次见所发出的感叹!

  IFDDataSetReference = interface (IUnknown)
['{3E9B315B-F456-4175-A864-B2573C4A2400}']
function GetDataView: TFDDatSView;
property DataView: TFDDatSView read GetDataView;
end;

  然而它确实是个接口。没错的。那么,FDMemTable序列的数据类型倒底是什么?这是许多人的疑惑。

答案,我们可以通过看DELPHI官方的DEMO来一一揭晓。

TFDJSONDataSets类型:DATASNAP远程方法支持返回的数据类型,可用于查询返回N个数据集的数据。然而,它只支持WINDOWS服务器。

TFDJSONDeltas类型:DATASNAP远程方法支持的输入参数的数据类型,可用于客户端提交N个数据集的修改后的数据。然而,它只支持WINDOWS服务器。

现在,DELPHI处在物联网AI时代,跨平台是趋势。那么什么是DATASNAP跨平台的数据序列类型呢?

答案是:TStream。没有之一。

TClientDataSet 和OleVariant已经不能适应这个时代,它们已经随风远去,将逐渐从人们的眼线中消逝!

论DELPHI三层的数据序列格式的变化的更多相关文章

  1. DATASNAP数据序列之FIREDAC的TFDJSONDataSets

    DATASNAP数据序列之FIREDAC的TFDJSONDataSets DELPHI XE5开始增加了新的数据引擎——FIREDAC,它是跨平台的数据引擎,WINDOWS.LINUX.MAC.APP ...

  2. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  3. Delphi三层网络架构代码实现

    Delphi三层网络架构代码实现 1 .三层网络的概念 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为: 表现层(UI).业务逻辑层(BLL).数据访 ...

  4. 数据交换格式与SpringIOC底层实现

    1.数据交换格式 1.1 有哪些数据交换格式 客户端与服务器常用数据交换格式xml.json.html 1.2 数据交换格式应用场景 1.2.1 移动端(安卓.iOS)通讯方式采用http协议+JSO ...

  5. Delphi三层开发小技巧:TClientDataSet的Delta妙用

    Delphi三层开发小技巧:TClientDataSet的Delta妙用 转载 2014年10月13日 09:41:14 标签: 三层 / ClientDataSet 318 from :http:/ ...

  6. delphi 三层架构简单例子(经测试成功)

    delphi 三层架构简单例子(经测试成功) 转载 2013年12月19日 09:48:57 1100 所谓三层: (1) 客户端 (2) 服务器端 (3) 数据库 在数据访问时,使得客户端必须通过服 ...

  7. 优秀的数据序列和还原类----TSimpleMsgPack

    优秀的数据序列和还原类----TSimpleMsgPack TSimpleMsgPack是D10天地弦的作品. 优点:至简,就一个单元文件实现,不需要引用其他单元. 缺点:不是标准的MSGPACK实现 ...

  8. JSON --- 一种轻量级的数据交换格式

    目录 1. 语法 2. 解析与序列化 JSON.stringify( jsData[, filter, indent] ) JSON.parse( jsonData[, reduction]) JSO ...

  9. H264的RTP负载打包的数据包格式,分组,分片

    H264的RTP负载打包的数据包格式,分组,分片 1.    RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...

随机推荐

  1. Sublime Text 使用介绍/全套快捷键及插件推荐

    如果说Notepad++是一款不错Code神器,那么Sublime Text应当称得上是神器滴哥.Sublime Text最大的优点就是跨平台,Mac和Windows均可完美使用:其次是强大的插件支持 ...

  2. 【论文阅读】Batch Feature Erasing for Person Re-identification and Beyond

    转载请注明出处:https://www.cnblogs.com/White-xzx/ 原文地址:https://arxiv.org/abs/1811.07130 如有不准确或错误的地方,欢迎交流~ [ ...

  3. HDU 4348 To the moon(主席树区间修改)

    题意 给你一个区间,支持如下操作: 在一段区间内加上一个值,并生成一个历史版本 查询某个版本下一段区间内的和 回到一个历史版本上并舍弃之后的版本 做法 这就是主席树区间修改裸题啦QwQ 上一篇博客我讲 ...

  4. 【BZOJ】4025: 二分图

    题解 lct维护一个结束时间作为边权的最大生成树,每次出现奇环就找其中权值最小的那条边,删掉的同时还要把它标记上,直到这条边消失 如果有标记则输出No 边权通过建立虚点来维护 代码 #include ...

  5. 子组件通过 $emit 触发父组件的自定义事件

    子组件: <template> <div class="train-city"> <h3>父组件传给子组件的toCity:{{sendData} ...

  6. mongo连接数满问题处理

    记一次mongo服务端无法建立更多连接造成的客户端无法访问mongo集群的故障分析及解决 一. 问题: 程序无法连接mongo集群 现象: 2017-09-05T01:29:08.765+0000 I ...

  7. 高能天气——团队Scrum冲刺阶段-Day 6

    高能天气--团队Scrum冲刺阶段-Day 6 今日完成任务 于欣月:完善计步器功能:实现了历史步数统计和设置锻炼计划功能,并实现可视化图形界面 余坤澎:将闹钟部分和小游戏部分进行了合并 康皓越:配合 ...

  8. Android-Start方式和Bind方式混合开启Service

    Android-Start方式和Bind方式混合开启Service 需求如下 需要开发一个音乐APP,需要满足以下的需求: 当退出所有的Activity后仍然能够播放音乐 能够控制音乐的播放比如说,暂 ...

  9. HTTP协议-缓存

    HTTP 协议中,缓存更多关心的文档资源的再利用.其目的是减少数据传输,加快相应速度等等.而对于缓存采用的是什么方案,也就是存在内存中还是硬盘中之类的问题,就属于另外的内容了. 假设,我身在广东,但是 ...

  10. SmartSVN has inconsistent newlines解决方法

    SmartSVN has inconsistent newlines解决方法 点击 Project–>Setting,选择Working copy下的EOL-style,将Default EOL ...