下一代软件架构是服务化、组件化、可配置化,可配置化成为了软件架构的最高级别。可配置化架构是软件架构努力的方向。可配置化架构是指利用可配置的方式构建软件的方法。它是在领域建模的基础上,以配置表述业务,以配置组织架构元素(服务、组件、数据),并对配置进行规范化、自动化的管理。

可配置化软件架构探析及实操秘诀

可配置化软件架构探析及实操秘诀 - 敏捷大拇指 - 可配置化软件架构探析及实操秘诀





0、三个层次的可配置性

软件系统最基本的三个层次是表示层、业务逻辑层和数据层,软件系统相应的可配置性也集中体现在这三个层次中。



0.1、数据可配置

数据可配置指可以在应用系统内部通过已有的功能修改数据库结构,修改完毕后可自动生成相应的数据库操作方法,供软件其他部分调用,无需重新编译即可自动适应调整后的结果。



0.2、界面可配置

指软件系统能通过各种不同的形式来展示数据源配置的结果。界面配置可分为两个方面,

1)界面定制:能够对界面展示的形式进行调整以满足用户的个性化要求;

2)界面控制:能自动适应数据结构的变化,在界面中自动添加或修改相应的数据项。



0.3、流程可配置

指用户可利用软件系统调整业务处理流程和处理方法,并且软件系统可从多种途径完成相同的任务,同时软件系统中存在多种功能或功能的组合来完成用户相同的 需求。




1、数据可配置化



1.1、横表转纵表存储

在数据库设计时就应考虑可配置因素,传统的数据库设计方案是二维信息集,一个操作界面对应一个数据库表;这这种方式简单、直观,但是可配置性较差。当出现需求变动的时候需要改动程序,往往效率较低。

横表转纵表存储的解决方案是将传统的横表拆分为3个纵表形式的扩展表,包括数据定义表、列定义表和列值表。

例如,原表人员信息表包括:ID、姓名、性别、出生日期、所在单位、职称、级别、学历这几个字段。拆分后的扩展表如下,数据定义表:表名。列定义表:列名。列值表:Value_ID,Column_ID,Column_Value。

当需要扩展一个新的字段时,只需要在列定义表中添加新的字段名,然后在列值表中添加列数据即可。

查询时采用纵表转横表的技术得到和原表相同的查询效果,数据量较大时的性能问题可以通过索引、分区、符合索引等数据库手段进行优化。另外,可以引入ORM数据持久化框架,并提供对象设计器实现所有的业务对象和数据表都动态生成,从而实现数据可配置的功能。



1.2、弹性字段

有些系统提供了弹性域来实现数据结构的可配置性,一个弹性域由多个段来组成,每个段是数据库表中的一个列。

弹性域又分为关键弹性域和说明性弹性域,关键弹性域主要用来决定表单的主键,它允许根据需要使用任意的代码组合以描述实体;说明性弹性域提供了扩展表单的空间,系统可以使用说明性弹性域来获取业务所特有的重要附加信息。

例如,账户字段是一个关键性弹性域,它由“公司”+“部门”+“科目”+“子目”+“分类”+“项目”六个段组成。在其他的公司中,可以将其定义为由“公司”+“部门”+“科目”这三个段组成的弹性域,也可以增加其他的段,将其定义为七个段组成的弹性域。




2、表示可配置



2.1、界面定制

界面定制指能够对输入和输出的形式进行调整以满足用户个性化的要求。例如,目前在许多ERP软件中已实现的个性化显示排序和查询功能,对任意一个表单,单击显示/排序功能键,可以自定义其字段是否显示和表单中字段显示的顺序。

用户可以勾选显示框来调整当前字段是否在界面中显示,同时设置显示宽度,并按自己的偏好对表单中字段的顺序进行排序,决定哪个字段在前哪个字段在后;当用户设置好显示顺序与显示字段后可以保存方案,下一次界面载入时自动调用该用户所偏好的方案。

主要方法是使用配置表或配置文件保存用户的个性化配置信息,在平台的表示层中预留接口,展现数据时每次都动态读取该配置文件,按配置文件生成查询表达式来对源数据集进行筛选,如果不存在配置信息则直接使用源数据集展示数据。



2.2、界面控制

界面控制指能自动调整输入、输出、查询界面以满足数据结构的变化。

可以使用界面生成器的方式来完成系统中用户界面的自动生成。在管理系统中最主要的用户界面有两种:批量数据查询界面和单个数据管理界面,由于这两种用户界面的功能大不相同,因此需要在平台系统中为这两类用户界面分别设计两种界面生成器。

可配置界面生成器主要是基于解释器的设计模式进行开发的,主要包括三个部分:配置文件的设计、用户界面解释器的设计,输出结果的设计。


2.2.1、配置文件的设计

使用XML文件来形成配置文件,其中主要定义了界面中控件的组成和布局信息。

配置文件如何生成的算法是其中的难点:如果是批量数据查询界面,可以将数据源中的数据直接绑定到列表或表格组件中;如果单个数据管理界面,首先需要遍历数据结构中的需要显示的属性,然后根据属性类型形成相应的组件,如String类型的属性形成TextBox组件,DateTime类型的属性形成DataTimePicker组件等等;然后再根据相应的算法计算出所有组件的位置布局信息;最后将这些信息写入配置文件。


2.2.2、解释器设计

解释器的主要作用就是对指定配置文件中的相关规则和配置信息进行读取,根据读取的信息利用反射机制产生相关控件并正确的生成用户界面。因此解释器的设计内容主要包括:控件定位算法的设计、配置文件解析方法的设计、以及根据配置文件生成相关控件方法的设计。


2.2.3、输出结果的设计

接收解释器产生的控件信息,并正确的生成用户界面。




3、流程可配置

大部分软件都使用工作流引擎来实现,工作流引擎有两个重要的作用:

1)帮助开发人员降低业务处理复杂度,避免流程逻辑的开发。

2)降低软件维护过程中因为流程变化所带来的维护量。

工作流引擎需要实现的功能包括流程的解析、资源的分配和逻辑的控制的等工作,主要体现在以下两个方面。

1)工作流引擎是流程的状态转换机,工作流引擎的任务是按照设计好的业务流程来控制实例的状态转换。

2)工作流引擎同样也是流程的路由控制器,其作用是按事先制定好的公式对当前流程状态进行解析,找出流程下一步的流向,进行实例逻辑处理,使流程向下转换。

工作流引擎在多数软件应用系统中是由用户或实施人员来设计相关业务流程,因此一般会要求具有图形化的操作界面,包括流程设计器的图形化界面,设计时使用简单易用的拖拽方式就能设置流程;应用时可随时通过图形化的流程图让用户查看流程运作情况,能非常直观的感觉到流程运行状态;也要求操作便利,提供各种方式让用户方便的快速设计业务流程。

此外,工作流引擎还必须支持各种流程特性,包括串行流程、并行流程、子流程、条件路径、可设置条件人员、可设置权限、机构、还包括中国特有的会签流程等等,流程定义工具要求必须能够满足以上所有流程特性。