一个初学者学用《搭建者》的一点经验和体会

 

我是一名政府的工作人员,曾经用cbdelphi及其它一些工具做过一些项目,其中有一个是商业项目,2000年做的,直到现在还在运行,程序设计是我的业余爱好。

有一阵子我对编程语言有广泛的兴趣,cc++,还有易语言,java也有所涉猎,有一段时间对动态语言也很感兴趣,rubypython等,我还研究过一些业务平台和mda工具的使用,如eos、炎黄盈动、kcom,极致平台还有delphi自身的intraweb组件等等,前前后后有几十个吧,既体会到了面向对象的繁琐,也体验到了需求变更所带来的恐惧,结果正如许多专家所说,没有银弹。

为什么如此耗费时日地寻找呢?因为我感觉开发web程序很困难,另外我需要在短时间内完成任务,而且能快速响应需求的变更,业务逻辑需要的是大粒度低复杂的东西,而灵活性则与小粒度和高复杂性有关,在两者的平衡中,我选择了《搭建者》做为开发工具。

刚开始我对这个工具充满了疑问,所以买来后放了快一年都没用,后面决定用这个工具做项目,所以每天利用下班时间猛学了一个月,然后,用了10天时间做完了“博州专利行政执法管理系统”,用了1晚上做完了“假冒冒充专利商品查询系统”(在博尔塔拉古自治州知识产权局网站左侧的在线服务栏目中有链接),我自己对这两个系统非常满意,因为我这两个项目能立即投入应用中,而不是陷入过度设计和无限期的开发的泥潭中。

有些专家说,组件式的编程,只能使人变傻,要深入底层才能了解真谛,我的目的是干活出成果,而不是科学家,我敢说没有哪个程序员说已经精通了windows再去设计程序吧,我认为工具要足够傻,傻瓜化是一个趋势,太多的细节是不能忍受的,因细节总是容易被遗忘的,不容易被复现的,而现在的编程语言和许多的工具有太多的不容易被复制的细节,忘记了用工具的本来的目的是什么,我对那些对细节津津乐道的所谓高手是不感冒的,这样做的成本很高。

《搭建者》全部是中文,没有复杂的编程语句,所有的技巧都是容易重现的,学习的成本很低,适合快速开发,这是我做完项目后的真实感受。

在项目的完成过程中,《搭建者》的开发者李洪亮师老师在关键的地方给了我很多帮助,他为人热心,有时问些很低级的问题都能认真解答,李老师对完成的两个项目给予了充分肯定,并提出了中肯的意见,在此深表谢意!在开发这两个项目的过程中,取得了一些经验,不敢独享,与大家共同进步,说的不对的地方,还望各位高手们指点。

一、界面的设计

这是专利行政执法管理系统的主界面:

以下是假冒冒充专利商品查询系统的主界面:

 

界面的设计中要注意以下几点:

——界面的居中。将所有的组件放到一个容器中,在容器的对齐属性中只保留上边一项就可以了。这个技巧在帮助中有,在这里只不过重复一下;

——将数据的显示组件和控制组件尽量放在一眼能看到的地方,而不是拖动滚动条才显现,将性质相同或相近的按钮放在一起;

——尽量避免滚动条的出现,尤其是水平滚动条,垂直滚动条最好也不出现,如果滚动条出现很长,说明界面上的内容太多了,应考虑分解功能;

——每个页面上都要给出返回功能按钮,使使用者不使用浏览器的回退键,否则会有难以克服的困难;

——每个页面上的功能应相对单一,将数据的浏览与编辑放在一起显然是不妥的,容易给人错误的引导,发生使用上的困难,应以数据为中心,增删改查和打印作为数据的功能以单独的项目出现,在页面中不能出现与数据无关的功能按钮,在查询页面中,若出现打印,则应说明是打印查询结果,在编辑页面中出现打印,则应在按钮中注明是打印当前页,不能让使用者去猜测;

——每一项目(这里所说的项目是《搭建者》中所说项目)最好只实现一个功能,如专利纠纷案件的编辑、案件的查询、打印等,一个项目中最好是页面数最少,这样容易维护;

——界面的设计,尽量采用一个项目调用另一个项目的做法,这样有利于公用数据的传递,避免多次登录的问题,而且可始终维持一个会话。

在专利行政执法系统中界面用了web窗口构件,虽然少用了很多公用构件和组合构件,但始终保持着两个会话,并且每次编辑不同的项目如:假冒冒充专利案件、专利纠纷案件及行政执法基本情况时都要重新登录,这是项目已经接近完成后才发现的,后李老师给出了解决办法,使用web窗口构件参数传递的办法,但由于使用了web窗口构件,导致打开了更多的会话,增加了复杂性,因此我建议在主界面的设计中,尽量少用web窗口构件,打开的会话多了会有问题。

二、组件的使用

1、数据网格的使用

大家可以看到,数据网格经过合适的设置可以很美观,这是个应经常使用的构件,最适合在主页上显示数据之用。

——将单元格间距设为0,行距与单元格高度有关,想显示得多就设小点;

——如不使用框架就出现如word表格一样的效果,并且有几条数据就显示几行表格,表格的宽度会自适应数据:

——如要使用分页显示,应设置开始位置为假,显示记录数设为合适的数值,并且在数据页面构件中也要设为一样的值,否则分页显示会错位;

——连接字段应为数据表中编号等具有唯一值的字段,因为字段单击事件往往与定位查询联系在一起。

2ado查询构件的使用

尽量用ado查询构件而不用ado表。

——在动态改变sql语句时,一定要先把ado查询的活动属性置为假,在执行时,执行打开方法;

——ado查询的执行与打开方法区别帮助上有,需要注意的是,打开的后续动作,要在执行成功事件中设置,定位查询成功后的后续动作必须在查询成功后事件中设置,不能搞混了;

如果查询执行打开方法后,在执行成功事件中设置不起作用,那就换用查询的执行方法,我没详细试,但在项目设计中确实出现过这种情形。

——改变了查询构件的sql属性后,其活动属性会自动变为假,这与delphi cb中是一样的,要引起注意,如果不显示数据十有八九是这个原因;

——有时会出现无法设置查询构件操作数据属性的情况,这也和sql属性相关,往往是在sql中出现了group by分组,这时可以先将此sql改为select * from 数据表,设置完操作数据后,再改回来就可以了;

——删除和插入方法的配合问题,前提是表中有数据可删,如果表中无数据可删时,先删后插入就会引起异常,这一点是我在做汇总报表时反复试验得来。

3、选择查询构件的妙用

如果将查询与打印查询结果做成了两个项目,那么打印查询结果的项目如何得到查询结果呢,选择查询构件中有一个方法是得到查询的sql,我们可以在退出查询项目追加执行打印项目时把得到的sql写到公用变量或通过项目参数的传递两种办法将这条sql传递到打印项目中,重新执行一遍就可以得到上一次的查询结果了。

4、文件上传构件的使用

在上传和显示图片时,用到文件上传构件,作用这个构件只要注意一件事情,如果要将图片上传到项目同级目录或其下一级目录,此构件的限定目录设为当前就行,如果要将图片上传到项目目录的的上级目录,必须将此属性设为网站。

5、报表件的使用

——显示备注字段时,豪华文本编辑构件是用不成的,这个不要用;

——显示备注字段时,报表字段文本标签也不要用,这个换行不行,无法正常显示,用报表标签构件,其字体选用Arial Black,中文换行长度一定要设,自动换行为真,自动调整大小为假,在报表面板的每页开始事件中将备注字段数据赋给报表标签就可以得到满意的效果。

6、页面建立与页面显示之前事件

页页建立事件中写入的代码只执行一次,下次再打开或返回时,其代码不再执行,因此其数据也不会更新,而页面显示之前,当页面每次显示时其中写入的代码都将执行,因此需要每次在显示页面时,其上的数据有更新需求的,应将代码写入页面显示之前或页面置前事件中,大家在碰到数据显示正确性问题时,可以考虑是不是将代码写到了错误的地方。

三、权限系统的设计

在《搭建者》中提供了权限设计的例子,那个是用到大项目中的,如果是只涉及到一个或几个数据库的小项目,大可不必如此复杂,只要征对是否能编辑某一项目做一个判断就可。

字段设计如下:

然后分别在假冒冒充专利案件、专利纠纷案件、专利行政基本情况的编辑及系统管理的按钮的单击事件中做一个判断就可以了。其它的如查询等也是一样,大家应知道怎么做,具体就不用在此罗唆了。

 

能想起来的就这么多,权当开发过程的备忘录吧。

这也充分证明,《搭建者》是简单的、好用的,这估计也是工具开发者的初衷,如果几十页都写不完,我恐怕根本就没时间和心情在这里写什么体会。这就是我对一个开发工具的判断。可以毫不夸张地说,这款工具比我所见过的任何一个开发平台都好用且灵活,是非常有特点的,是更加简单化和智能化的delphi,简单即美,我只是不希望这个工具变得无比复杂,开发者需要低的学习成本和对复杂性的控制。

再次,对李老师开发出如此好的工具表示敬佩和感谢!如有错误或不当之处也请 李老师指正!

 

 

顺便将我完成的两个项目链接附下,请大家多多指正。

博州专利行政执法管理系统:

http://www.bzkj.cn:6666/?ipe=./zhuanlizhifa/专利行政执法管理系统主页

假冒冒充专利商品查询系统:

http://www.bzkj.cn:6666/?ipe=./jmmcshangpin/假冒冒充专利商品主页

 

 

 

 

 

                                新疆博州知识产权局 董晓旭

   dongxiaoxu@tom.com

                                        2008-1-25