快速开发平台的原理和实现(三)

来源:互联网 发布:手机淘宝详情添加视频 编辑:程序博客网 时间:2024/04/30 21:39

        在一个应用开发中,用于处理界面的代码大概会占到全部代码的60%~80%,因此,如何让界面的开发省时省力是快速开发平台最需要解决的问题,也是衡量快速开发平台优劣的重要方面。

        在C/S风格的软件还很流行的年代,用户对于菜单是否华丽、按钮是否做成水晶状等界面美化方面的要求还不是很高,只对操作的便捷性、数据管理的直观性等正直影响使用的问题提出必要的要求;而当B/S风格流行起来后,用户对界面的美化提出了更多的要求,反而相对地忽略了操作性的要求,这导致很多应用的界面千奇百怪,没有了统一的使用风格,也增加了用户的学习成本。快速开发平台在实现界面美观的基础之上也应该能够开发出统一风格的使用界面,一方面使用户的操作更加具有亲和力;另一方面也使界面的开发更加快捷。 我们希望快速开发平台的界面都能够通过可视化配置而不是写代码的形式来实现,这不仅可以降低开发人员的学习成本,也可以使界面的开发更加方便。通过对大量应用系统的界面分析,我们可以把应用界面分成表单、查询、报表、页面等几大块,通过这几种界面元素的组合就可以构建出完整的业务应用软件。

(1)表单

        表单是一个业务对象最直观的界面表现。通过表单我们可以实现业务对象的创建、编辑、查看等功能,表单中的每一个控件都与业务对象的特定属性相关联,比如表单中的某个文本输入框对应业务对象的name属性,下拉框对应业务对象的type属性等。有了这层对应关系,当表单提交时平台就知道如何根据表单中的用户输入构建相应的内存对象,根据之前的介绍,生成内存对象后就可以通过多次转换最终形成数据库记录永久保存。

        上图是快程业务构建平台的表单定义界面。表单中的控件是直接将业务对象的属性拖入到表单中创建的,因此每一个输入控件都与业务对象的属性字段相关。但由于业务对象属性字段的类型可以对应多种输入控件,如string类型的业务对象属性字段可以对应单行文本输入框、多行文本输入框、Html文本等多种控件,用户可以通过控件的属性设置来修改相应的控件类型。在上图中还有一个明细表,这就是各类界面元素相互组合的最简单的例子。

        仅仅将业务对象的属性字段用控件进行组合对于一个应用系统来说还是不够的,我们还需要能够控制各个控件在不同情况下对是否可编辑、是否必填以及值进行相关的配置。这个配置我们称之为表单状态,如下图所示:

        在表单状态中我们可以对值、可编辑性、是否必填等选项用表达多的方式来配置。例如,属性字段“总额”的值是属性字段“单价”和“数量”的乘积,那么我们只需要在属性字段“总额”的值选项中输入表达式“单价*数量”,这样当属性字段“单价”或“数量”所关联的输入控件的值发生变化时,“总额”总是能够根据表达式中的定义计算出相应的数据。可编辑性和是否必填也可以相同的方式进行设置,只不过表达式为逻辑表达式。

表单设计的最终结果还是一个XML的定义文件,如:

<Window paddingLeft="2" paddingRight="2" paddingTop="2" paddingBottom="2">  <TabNavigator>   <tab label="default"> <Label width="82" height="25" text="单号:" propertyUID="id_5" x="3" y="3" style=""/>  <TextInput propertyUID="id_5" width="177" height="25" x="63" y="3"/>  <Label width="82" height="25" text="到货日期:" propertyUID="id_4" x="243" y="3" style=""/>  <DateField propertyUID="id_4" width="161" height="25" x="323" y="3"/>  <Label width="82" height="25" text="收货单:" propertyUID="id_3" x="503" y="3" style=""/>  <EntityField propertyUID="id_3" width="160" height="25" x="563" y="3"/>  <Label width="82" height="25" text="供应商:" propertyUID="id_1" x="3" y="31" style=""/>  <EntityField propertyUID="id_1" width="420" height="25" x="63" y="31"/>  <Label width="82" height="25" text="合计金额:" propertyUID="id_16" x="503" y="31" style=""/>  <TextInput propertyUID="id_16" width="161" height="25" x="563" y="31"/>    </tab>  </TabNavigator> </Window>

        快速开发平台能够将这些XML定义转化为相应的界面,这个模块称之为快速开发平台的展现引擎。不同的展现引擎可以将相同的XML定义转化为不同的界面,如Web展现引擎能够转化为Html界面,而C/S展现引擎则转化为客户端界面等。

原创粉丝点击