发信人: edison()
整理人: edison(1999-11-24 07:10:56), 站内信件
|
很好,我的 OO 开发与你有少许出入。为了省事我就简练一点描述一下:
首先,所有关于业务处理的 Code 绝对不会出现在 Button 的 Clicked 事件或者
Dw 的 Double Click 、Menu 的 Click 之类的事件中。关于业务处理的 CODE 要
不就放在 Window 中要不就放在 UserObject 中。这点我们几乎一样。我要强调
的意思是这点很重要。这是将界面逻辑与业务逻辑分开的第一步!然后我也和你
一样每个 Dw 对应一个 UserObject 。但是这里有少于出入,我们探讨探讨!
我定义了一个叫 n_om ( Object Manager ) 对象作为所有这些 UserObject 的父
类。这个对象的意思顾名思义叫做对象管理器。因为数据库表中的一条记录可以
看作是一个实体(或者叫对象实例)。关于所有这些对象的一些公共操作肯定有
插入、删除、保存、修改等。所以我把这种 Object 称作 Object Manager 。而
且这个 n_om 是直接继承 DataStore 的。它的 DataObject 自然就对应那个
DataWindow 。这样整个增删改操作都全部封装起来了。除了这个 OM 之外。我还
要同时再定义一个 n_cst_object 。这个 Object 中的属性包括了 DataWindow
中的所有列。这个对象就可以形象的表示一个一个的实体。n_om 管理的对象就是
n_cst_object 。这样那些关系到一个 Object 的方法就放到 n_cst_object 中来。
同时业务关系中的各个对象之间的联系也放到 n_cst_object 中完成。我觉得这
样更加 OO 一点。其实我的 OO 思路还不是很成熟,一直处于一中摸索阶段。所以
希望大家一起来讨论讨论。
【 在 fanpb (笨笨) 的大作中提到: 】 : 我们在产品的开发中使用面向对象技术。有一点心得供大家参考。 : 一、界面逻辑分离。 : 面向对象重要特性是封装,那么用什么封装?是窗口还是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 事件 : 响应事件 ----------------》调用窗口的界面处理方法。 : 就写这么多,请大家指正。 : :
-- 谢谢没有在 "将本文章寄一份给原作者" 处打勾, 再次感谢!
※ 来源:.网易 BBS bbs.netease.com.[FROM: bbs.szptt.net.cn]
|
|