精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Powerbuilder>>PB中使用注册表技术>>[ 各执己见的讨论 ]>>关于面向对象

主题:关于面向对象
发信人: 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]

[关闭][返回]