应用于表层的 OOP 技术:db2js

应用于表层的 OOP 技术:db2js

话说 OOP 在业务处理上一败于数据库,再失守于 web 服务器,无功而返,快快不乐,sorry,怏怏不热。

它不禁提出了一个富有哲理的问题:那么,什么地方用 OOP 会带来无副作用的快感呢。

回顾被 OO 占领的领域:

1) 扁平函数库的人格化封装。例如 socket,我用过一个很漂亮的 CSocket 类,用起来比函数好多了。顺便提一下,芝麻是从下面开花节节高的,从上往下搞我自己还没遇到成功的先例。这样封装之后,显而易见的好处是类属成员安全多了,不会重名。 :)

例如,Windows.Forms.Button 也是对扁平函数的封装。

2) 用于吹嘘技术先进。其实只是封装得先进。

3) 如果没有结构,OO 可以用来充当结构~~

使用 OO 表达的结构,由于对象变量即指针,用起来特别顺手。

4)有待看官补充。

结论是: OO 是一种高超的封装技术,可以灵活的表达数据结构。

即使如象棋这样的算法程序,对 OO 也不会做封装之外的要求。最需要灵活的表达数据结构的地方,我发现是界面。

例如一个常用的列表视图(ListView),其组织结构亦非常复杂。更遑论要做到正确无误的响应。一个 Listview 对应一批数据,这些数据如果没有封装为对象,仅凭指针操控,难以运用不说,增加删除等等内存管理问题无疑很容易失手。相反,如果采用具备内存回收能力的 OOP 语言开发,实现起来会容易的多。

本文主要论述 js 中心的 web 界面制作以及整个系统结构的布置。

和 WinForm 相比,虽然现成的库少,但 Web 具备强大的图文混排能力,一个 table 标记既可以充当 ListView, 又可以充当 Treeview,甚至更多。用于 Web 操控的语言 javascript 亦被设计的足够强大,拥有匿名方法、后期绑定等等动态语言特性。

因此,web 的界面设计,实为以 html 为终端的 js 的设计。经典的 MVC 理论依然可以运用于此。典型的元素如 div,可以和一个 js 对象互相引用,js 对象的 update 方法用于渲染该网页元素,网页元素呼叫 js 对象的处理代码以实现响应。

js 对象的序列化和反序列化,以及处理业务的能力,借助 ajax 实现。

所以以界面为中心来看,js 对象实为整个系统的核心,以业务为中心来看,数据库的表格为系统的核心,除了这两个,不知道还有没有可以充当中心的。

因此,现今最紧要的问题是解决 js 对象和数据库之间的映射。实现 db2js 的途径,我所思得的有两种:

1) web 服务器或数据层,把查询结果包装为 xml ,在客户端解析,反序列化为 js 对象,保存是相反的过程。

2) web 服务器或数据层,直接生成 "companyList.add(id,name...);" 这样的 js 语句,通过 js 的 eval 命令,在客户端直接形成 js 对象。这是我最欣赏的办法。

这个方法更有趣的做法是直接在 sql 语句的查询中生成创建语句。例如

select 'companyList.add(' + id + ',"' + name + '");' from company

将查询结果抛到前台,即可完成对象的创建。这种实现所带来的整体成本利益尚没有仔细思考过。但对于开发来说,无疑大为简化。

现在出现在开发者面前的只有两个角色,数据库和 js。web 服务器只出任一个中间媒介,一次书写,永不重写,可以忽略不计。

第一次开发时,可以先做静态页面,手工构造几个 js 对象,先做出效果来。这是界面模型。由于没有用到如 struts 那样的自定义标记,美工可以无障碍的对静态页面进行美化。

此后开发人员将生成伪对象的代码换成 ajax 的可操作数据库的代码。系统即可敷使用。

最后,增加数据检查能力,此时项目已可告结束了。

权限的实现在数据库中考虑。可以使用角色,也可以使用自制的 ACL 表,在存储过程调用之前进行检查。

这个技术已经少少的使用过了,很适合开发,唯仍未大举应用。有待来者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值