我的 O/R Mapping 情结 ..

作者: 一了 <1liao3@funlang.org>
日期: 2015-12-07

我是从 97 年开始接触数据库的, 当时学的是 FoxBase, 既是一种关系数据库, 也是一门编程语言. FoxBase 是我课堂上学的唯一一门编程语言, 当然也是唯一一种数据库, 我的编程生涯实际上就是从 FoxBase 开始的. FoxBase 的一大特色是数据库操作命令直接嵌入语言中, 这是我第一次接触的印象, 同时也成了我多年追求的目标. 几年后, 我接触的 PB 也是如此, 此是后话了.

99 年我用 C 语言写了一个数据库, 就是模仿的 FoxBase, 当时完成了表结构定义, 增删查改, 浏览, 编辑, 报表(手画报表)等功能, 带菜单操作(DOS系统), 当然当时还不会做语言, 多年之后才有了设计实现编程语言的功力. 模仿 FoxBase 写一个数据库, 目的就是为了简化数据库的操作, 同时也是为了升级打怪练功力(这个数据库先是用 Basic 写, 然后用 C 写, 用 C++ 又实现了一遍, 真是闲的蛋疼啊). 就是从这里, 有了数据库的情结.

到了 2000 年, 我写了第一个商用系统, 是一个航空运输管理系统. 这个系统的数据库先是用 Access 做原型, 后来换成 MSSQLServer. 为了应付灵活的报表(报表主要用 Excel, 少部分 Word)以及其他多变的需求, 我将部分数据用数据字典的方式维护, 也就是将部分表结构做成活的结构, 不完全依赖数据库系统表维护. 这时我还没入行呢, 没去过软件公司工作, 全是自己闭门造车瞎琢磨搞出来的.

后来, 就进软件公司搞了, 除了 PB 和 Lotus Notes/Domino(这是我接触的第一个文档数据库), 其他的全部都是字符串拼 SQL 搞数据库, 烦哪. 中间也做了多次抽象尝试, 尽量用标准 SQL(尤其 SQL-92, 在数据库函数上进行移植抽象, 比如在 DB2 上做了一整套 MSSQLServer 函数), 均无法改变手拼 SQL 的局面.

2003 年做了一个强类型类 SQL 查询原型设计, 因为资源不够, 最终放弃了. 项目的最优先目标总是完活, 拿钱...

2004 年, 我终于不用单打独斗(即使在软件公司, 有关抽象的活, 我也只能单打独斗)了, 我们开始做了一个模板引擎生成一大堆垃圾代码来操纵数据库, 虽然仍然是拼字符串 SQL, 但终于是眼不见心不烦了, 哈哈哈...

2005 年, 我们自己创业, 终于实现了 .NET 版和 Delphi 版的 O/R Mapping 框架, 顺带实现了这两种语言/平台的强类型查询语言, 一种类 SQL 的 OQL (两年之后, 微软的 LINQ 才面世, 而且我不认为 LINQ 比我们的好, 请看 视频演示, 手机党不要戳了, 是 Flash), 随之而来的还有一个代码生成器和一种新的编程语言----Nuva 语言(Nuva 语言的品牌故事). 我们的 O/R Mapping 经受住了第一个用例----一个工作流引擎的考验, 同时 Nuva 语言和 CodeAuto 代码生成器也是典型的用例.

如果说银弹终究无法找到, 但我们会一直走在寻找银弹的道路上, 永不停歇!