发信人: fanpb()
整理人: edison(1999-11-24 07:11:40), 站内信件
|
【 在 edison (edison) 的大作中提到: 】
: 我的天,我们的思路几乎一模一样!太 Cool 了!
: 我曾说一个 DW 对应一个 Object 。其实我们的意思是一样的,我可
: 能漏说了。我的 DW 有些是对应一个表、有些是对应多个表。而且我
: 的 n_om 是继承 DataStore 的。因此,我已将关于各个表之间的完
: .......
殊途同归,确实太cool了。
处理上略有不同之处在于:我们没有用结构或uo传递一条记录。
而直接使用PB提供的Sharedata函数。好处是:在Datawindow修改
升级时,只要保证grid和freeform的sql一样即可,而无其它烦恼。
不需要改结构或uo。而且在卡片窗口里可以滚动、翻页,不需要
每次交换数据。
我也喜欢标准界面,但用户有时有要求,因此不得加一些button
之类。 如“含废品”,“过滤已记帐的”。这样还得重载窗口控件
布局函数,很烦。而我们的领导要求我们“体贴”用户,没办法,加吧。
在设计功能基类时,预留了大量的事件,其代码往往为return true。
这些事件中用于开发重载的。比如保存动作,要触发保存前事件、保存事件、
保存后事件。其中任何一个事件返回FALSE算保存失败,ROLLBACK;全成
功COMMIT。这样基类就有了另一个用途——程序框架。开发者只要填写
事件的script就完成了开发。例如我们规定:
保存前:检查权限、能否保存,不准写数据库。
保存:datawindow update。
保存后:相应修改,如减库存。
最后commit,并打印。
为什么用事件?其实这些事件都应该是protected 的函数。但我是个
实用主义者:在pb中,继承后的对象看不到基类的函数。而且需要手工复制参数
等。基类函数修改参数个数和类型后,继承后的对象的函数会变成另一个。
而事件好得多:在继承后的对可视化看到,填代码即可。基类参数变化后,
regerate继承后的对象就对了。
有了程序框架,自动生成就容易了。其实说出来我都觉得不好意思,我不
懂PFE是怎么做的。我们做法是:从基类派生出一个模板,并按开发规范填好代码
和注释。如保存前事件override模式,模板是这样写的:
if not event 基类:aa_beforeupdate(参数) then
return false
end if
// Your code,由开发时填写商业逻辑代码,如检查权限等。
return true
剩下的自动生成就是把模板对象的语法取出,按操作输入的参数修改一些变 量、
名称,最后存到目标PBL中即可。没什么高深之处。
悄悄地TO EDISON:能不能把DataWindow Edit Service 发到我的信箱中,可
我不能全部发给你我们的类库,因为是这公司版权,而且不准公开。我只能告诉 你
我们是怎么做的。先谢过了。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.106.4.9]
|
|