- 主题:如何写一个函数能够序列化任意结构
【 在 RunningOn 的大作中提到: 】
: 原来标题里说的“结构”不是指 struct 或 class ...
:
是struct。
用数据库生成模板,依据模板生成一个与对应结构一样布局的内存区域。
然后可以直接使用,也可以把这两东西转换成C程序文件输出。
57楼和58楼就是用数据库生成的,include到应用程序里就可以用了。
缺点是,数据结构如果改变,就要重新生成。
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
嗯。JAVA的与我的对应功能叫ORM.
【 在 StephenLee 的大作中提到: 】
: 抱歉我以为楼主的SRM是供应链系统呢,原来还有别的含义,我狭隘了
--
FROM 221.218.61.*
怎么做到的?学习一下?
【 在 ylh0315 的大作中提到: 】
:
: 但是我做到了,利用映射机制,就是写一个结构说明书。
: 这办法对于已经存在的第三方软件的已知结构也适用,给它写个说明书。就是template。
: 【 在 poikilotherm 的大作中提到: 】
: : 没反射机制,做不到
#发自zSMTH@么么哒
--
FROM 223.104.41.*
最早,需要做一个3层客户服务器工具,要求安全高效的处理高并发事务。这个工具是别人开始做的。是一个通用平台,在之上可以架构各种应用。最基本的功能就是在网络传输各种不同的结构数据。那个时代JAVA刚刚出世,C++也刚刚冒头,还没有什么序列化反序列化的概念,只有一个想法,对任意不明结构数据打包拆包。数据是在不同平台互相传输,struct在各个平台,包括windows,unix,小型机,微机之间互相传送,它们的成员大小,大头小头和边界对齐规则都是不同的。
那时开始使用socket,程序也不复杂,也没有抵抗ddos什么的概念,我问到开发者,这个平台对应用的最大贡献是什么?答曰,任意struct的打包拆包程序。
当时的模板只有2个参数,类型,长度,offset都是现算的。
我研究了一下他的算法,改进一下,把offset加入模板,在第一次使用这个模板时需要进行一次计算,以后就直接使用offset,效率大为提高。
当时还没有json,xml啥的,就是类似csv的,用分隔符分割的字符串。
成功以后,考虑到sql语句的生成,模板里增加了成员名,格式,主要针对数据库的时间量,和bind标志,解决不完全表结构引用的问题,也就是不对所有列的访问。就是说,到这一步,就解决了对sql进行序列化和反序列化问题。
这时就有了一个好处,在大型系统开发时,数据结构是经常变化的,只需要调整模板,大部分程序不需要修改,从新编译即可。我们称为柔性编程。
大型数据结构,写模板,即繁琐又易错,所以,开发组有专人负责维护模板系统。
这时,提出一个要求,应用客户端需要下载一些固定信息,一些表,每个表要写一个程序。能不能只提供表名就可以下载任意表。于是研究了数据库的数据字典,读出并转换,就可以制成模板,从模板就可以生成struct。这就构成了通用模板库。从柔性编程提高到泛型编程的高度。
而且,模板可以存储也可以传输。在服务器里构建了动态模板库,某个客户端访问了一个表,就把这个表的模板存到本地模板库,以后再有要求这个表的,就不必从数据库生成了。当然这个模板库也是需要维护的,在运行中改变了数据结构,要进行相应的变更。
【 在 hyperLee 的大作中提到: 】
: 怎么做到的?学习一下?
:
: #发自zSMTH@么么哒
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*
和Google Protocol Buffers(protobuf)有什么差别?
【 在 ylh1969 的大作中提到: 】
: 最早,需要做一个3层客户服务器工具,要求安全高效的处理高并发事务。这个工具是别人开始做的。是一个通用平台,在之上可以架构各种应用。最基本的功能就是在网络传输各种不同的结构数据。那个时代JAVA刚刚出世,C++也刚刚冒头,还没有什么序列化反序列化的概念,只有一个想
: ǎ匀我獠幻鹘峁故荽虬鸢J菔窃诓煌教ɑハ啻洌瑂truct在各个平台,包括windows,unix,小型机,微机之间互相传送,它们的成员大小,大头小头和边界对齐规则都是不同的。
: 那时开始使用socket,程序也不复杂,也没有抵抗ddos什么的概念,我问到开发者,这个平台对应用的最大贡献是什么?答曰,任意struct的打包拆包程序。
: ...................
--
FROM 112.48.103.*
比他早。
是C泛型,不是C++泛型,但是C++可以用。
我的能做数据库。它的只能序列化反序列化JSON,xml什么的,做不了SQL。我这个相当于ORM,Object Relational Mapping。C没有Object,有struct,所以叫做SRM。
他们是编译期处理的,我是运行期处理的。
比如多个类似的表做相同的操作,写一个程序就行,代入哪个模板,就做哪个表。他们的不行,几个表就得写几个程序。
比如,6个类似表做去重,去掉重复记录,一个程序解决了。
理念不同,我们那时候讲究程序数据独立,一个程序,可以处理很多不同数据。也就是所谓泛型。
现在是OOP,数据和处理程序绑定在一起。有多少种数据就有多少种程序。
【 在 callmebbser 的大作中提到: 】
: 和Google Protocol Buffers(protobuf)有什么差别?
:
--
修改:ylh1969 FROM 221.218.61.*
FROM 221.218.61.*