pfc对于pb的mis开发非常重要。
重要性首先在于它的正确性与稳定性,这是由很多pfc的开发实践证明的,否则无法解释pfc为何从5到8没有结构上的变化。
第二个是它提供了一个完整的体系结构,它试图用这个体系结构来应付各种各样的需求变化,实践证明是行之有效的,这也就是各种行业软件的mis开发都能应用pfc。
pfc内部元素的组成来源有两个,一个是继承原有的pb对象,可以叫它对象,如pfc_w_master, pfc_u_dw.另一个是新建的对象,一般称之为服务。如pfc_rowmanager, pfc_linkage.服务主要描述的是控件间的关系。
一般mis应用,mdi应用的比较多。mdi的组成部分主要有application, frame, menu, sheet, userobject, dw.
pfc针对各部分都提供了功能增强和扩展。
增强和扩展的主要方式是
1是继承,增加实例变量(用于保存状态),增加事件(用于和外部控件提供接口),增加函数(改变自己的状态)。比如sheet继承于windows提供了关闭,打开,等附加功能。
2是利用服务,这是一种组合的方式,通过检测是否开关服务,可以判断是调用相应的服务处理程序,还是用默认的自身的处理程序。这差不多可以在各个事件都能看到。
由于从application到dw路径很长,因此提供了一个消息路由功能,提供了一些默认的消息处理路径,和消息发送方式,如menu的。而最大,最主要的消息处理分发功能集中在w_sheet上。这样子可以把开发者的注意力集中到各部分的接口部分,和各部分内部的处理,而不用过多考虑复杂的调用关系,
mis开发的一个主要部分是处理数据库。而处理数据库是pfc的主要方向,这也是把pfc_save事件放到w_sheet的一个主要原因。另一个原因是save消息一般是从菜单或按钮命令发出的,而w_sheet是消息的集中处理地。
u_dw的事件可以从几个部分解剖,retrieve部分,update部分, 数据操纵部分。
数据操纵需要有两个定位条件,一个是行,一个是列。因此一部分事件是行变换部分,一部分事件是列变换部分。数据操纵是开发的主要部分,因此在rowfocuschange,itemchange事件可以看到大量的服务,而这些服务无外乎是增强本u_dw的功能和建立和其他控件的联系的作用(最典型的是linkage).
考察pfc_save事件,可以看到pfc_w_master的80%的代码都是为pfc_save做准备。而pfc_save也是有7,8个事件组成,而这每个事件又大都遍历所有的u_dw,这也是面向对象所说的,“自己的事情自己做,自己做不了的给上级做”的一个体现。另一方面,又提供了可以为用户在不同层次,随意的在合适的位置添加业务逻辑,可以在不伤害原来代码的情况下,增加业务逻辑。
数据校验有几个层次,1、数据格式不对,2、validition 表达式, 3、本dw的一些业务校验,如不能为空等等,这些能判断出来的就放在pfc_validation去写,4、本dw判断不出的,比如借贷,存盘时要相等,就可以放在pfc_preupdate 去写,总而言之,能尽早处理就尽早处理,攒到最后就处理不过来了,会漏掉的。
再说一说典型的linkage服务,这个服务是提供了主从表服务。而主从表关系体现在行和列上。
主要逻辑是:
1、主表行变化时,从表显示对应的行。
2、主表连接字段变化,从表也变化。
3、从表增加时,主表必须要有行。而且相应的连接字段必须和主表一致。
4、主表删除时时间,从表也删除。
5、主表在有从表的行时,不能把连接字段清空,不能和已有的主表行连接字段内容一样。
还有一些其他的,也不少,从linkage的代码上可以看出来。
因此linkage调用会发生在rowfocuschanging, rowfocuschanged, itemchanged ,
itemerror, pfc_deleterow, pfc_addrow,pfc_save等事件上。
还应该注意到linkage所加的实例变量的目的。
linkage会遍历所有的linkage链上的dw,做相应的处理。
最后可以看一看linkage的保存,是如何解决主从表间有外键的办法,分四次去update,很有趣.
总结一下,写或读一个服务的主要过程就是,
1、了解服务的目的。
2、总结服务所有可能触发的时间。
3、定义实例变量。
4、定义事件
5、定义函数
6、写代码。
最后我想说,pfc虽然好,但还是要结合自己的开发方式,对它做扩展,才更合用,千万别把pfc挖一块,那样破坏了这个体系的完整性,会有问题的.
重要性首先在于它的正确性与稳定性,这是由很多pfc的开发实践证明的,否则无法解释pfc为何从5到8没有结构上的变化。
第二个是它提供了一个完整的体系结构,它试图用这个体系结构来应付各种各样的需求变化,实践证明是行之有效的,这也就是各种行业软件的mis开发都能应用pfc。
pfc内部元素的组成来源有两个,一个是继承原有的pb对象,可以叫它对象,如pfc_w_master, pfc_u_dw.另一个是新建的对象,一般称之为服务。如pfc_rowmanager, pfc_linkage.服务主要描述的是控件间的关系。
一般mis应用,mdi应用的比较多。mdi的组成部分主要有application, frame, menu, sheet, userobject, dw.
pfc针对各部分都提供了功能增强和扩展。
增强和扩展的主要方式是
1是继承,增加实例变量(用于保存状态),增加事件(用于和外部控件提供接口),增加函数(改变自己的状态)。比如sheet继承于windows提供了关闭,打开,等附加功能。
2是利用服务,这是一种组合的方式,通过检测是否开关服务,可以判断是调用相应的服务处理程序,还是用默认的自身的处理程序。这差不多可以在各个事件都能看到。
由于从application到dw路径很长,因此提供了一个消息路由功能,提供了一些默认的消息处理路径,和消息发送方式,如menu的。而最大,最主要的消息处理分发功能集中在w_sheet上。这样子可以把开发者的注意力集中到各部分的接口部分,和各部分内部的处理,而不用过多考虑复杂的调用关系,
mis开发的一个主要部分是处理数据库。而处理数据库是pfc的主要方向,这也是把pfc_save事件放到w_sheet的一个主要原因。另一个原因是save消息一般是从菜单或按钮命令发出的,而w_sheet是消息的集中处理地。
u_dw的事件可以从几个部分解剖,retrieve部分,update部分, 数据操纵部分。
数据操纵需要有两个定位条件,一个是行,一个是列。因此一部分事件是行变换部分,一部分事件是列变换部分。数据操纵是开发的主要部分,因此在rowfocuschange,itemchange事件可以看到大量的服务,而这些服务无外乎是增强本u_dw的功能和建立和其他控件的联系的作用(最典型的是linkage).
考察pfc_save事件,可以看到pfc_w_master的80%的代码都是为pfc_save做准备。而pfc_save也是有7,8个事件组成,而这每个事件又大都遍历所有的u_dw,这也是面向对象所说的,“自己的事情自己做,自己做不了的给上级做”的一个体现。另一方面,又提供了可以为用户在不同层次,随意的在合适的位置添加业务逻辑,可以在不伤害原来代码的情况下,增加业务逻辑。
数据校验有几个层次,1、数据格式不对,2、validition 表达式, 3、本dw的一些业务校验,如不能为空等等,这些能判断出来的就放在pfc_validation去写,4、本dw判断不出的,比如借贷,存盘时要相等,就可以放在pfc_preupdate 去写,总而言之,能尽早处理就尽早处理,攒到最后就处理不过来了,会漏掉的。
再说一说典型的linkage服务,这个服务是提供了主从表服务。而主从表关系体现在行和列上。
主要逻辑是:
1、主表行变化时,从表显示对应的行。
2、主表连接字段变化,从表也变化。
3、从表增加时,主表必须要有行。而且相应的连接字段必须和主表一致。
4、主表删除时时间,从表也删除。
5、主表在有从表的行时,不能把连接字段清空,不能和已有的主表行连接字段内容一样。
还有一些其他的,也不少,从linkage的代码上可以看出来。
因此linkage调用会发生在rowfocuschanging, rowfocuschanged, itemchanged ,
itemerror, pfc_deleterow, pfc_addrow,pfc_save等事件上。
还应该注意到linkage所加的实例变量的目的。
linkage会遍历所有的linkage链上的dw,做相应的处理。
最后可以看一看linkage的保存,是如何解决主从表间有外键的办法,分四次去update,很有趣.
总结一下,写或读一个服务的主要过程就是,
1、了解服务的目的。
2、总结服务所有可能触发的时间。
3、定义实例变量。
4、定义事件
5、定义函数
6、写代码。
最后我想说,pfc虽然好,但还是要结合自己的开发方式,对它做扩展,才更合用,千万别把pfc挖一块,那样破坏了这个体系的完整性,会有问题的.