最早,需要做一个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.*