发信人: fanpb()
整理人: edison(1999-11-24 07:10:49), 站内信件
|
我们在产品的开发中使用面向对象技术。有一点心得供大家参考。
一、界面逻辑分离。
面向对象重要特性是封装,那么用什么封装?是窗口还是UserObject?
我们看PB的例子,包括PFC(我只看了PB5的),一般程序的主体是窗口。
大多script都是事件驱动的。例如窗口上一个button"新增记录",那个这个表的
"新增"是逻辑是依赖这个button存在的。如果没有新增button就没有这个表的新
增逻辑。但如果在复杂的调用中就存在问题了。
我看了前些天有人问的一问题极具代表性,我重复一下这个问题:
作 者: superwolfman (小飞) 1999.11.18
有一个进货表test1:
货品名称 卖出否
苹果 n
梨子 n
西红柿 n
主索引为"货品名称"
d_test1
w_test1
另一个售货表test2:
货品编号 货品名称
1 苹果
主索引为"货品编号"
d_test2
w_test2
可不可以在表test2提交的同时将存在于test2中的数据影响到表test1的数据?即
在出货表test2中卖出了"苹果"在单击"保存"按钮的同时使test1表变成:
货品名称 卖出否
苹果 y //原来是"n"
梨子 n
西红柿 n
这个问题我这样理解:表test1和表test2各应有一个逻辑实体(一个uo)负责
管理。每个uo都具有:
公共成员变量(属性)、函数(方法)、事件。uo本身包括了表的所有方法 :
1、新增 2、查询、3、修改 、4、删除方法 。并且是不依赖任何界面存在的。
那么如果要编辑数据时该怎么办,这就是第5个方法:编辑。调用该方法打 开
窗口进行交互式操作,并且把所有GUI的事件发给UO,由UO进行界面处理。
如果这样做,就这样设计:
uo n_test1表test1的管理对象。
uo n_test2表test2的管理对象。
在n_test2中内嵌一个n_test1 test1。
在n_test2.of_update()保存方法中,调用test1.修改方法。
这个时候体现出界面逻辑分离的好处,因为并没有出现编辑test1的窗口。
如果就这个例子而言,这样做显然多此一举。可以把test1的update复制到
test2的保存script中。但如果是大规模开发,这就是维护的灾难。因为t est1
的update可能出现在数百个窗口的Script中,如果需要修改test1.update, 要找
出所有这些修改的script,并且一个不漏简直就是奇迹。事实上我们公司统 计
发现这种原因造成的软件BUG不在少数。
所以需要uo封装商业逻辑,而窗口封装界面逻辑。窗口对触发事件,没有任 何逻辑
处理(不对数据库进行任保读写)。窗口是uo的一个可视表现。
一个逻辑不要出现在两个地方。对表test1的任何修改绝对不允许出现在非
n_test1的地方。 结构如图:
uo逻辑部分 界面部分
查询方法
增加方法
修改方法
删除方法
编辑方法 ----------------》打开一个或多个编辑窗口
<-----------------发送gui 事件
响应事件 ----------------》调用窗口的界面处理方法。
就写这么多,请大家指正。
-- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.106.4.9]
|
|