动态配置型软件架构
------客户信息管理系统软件架构分析设计
1. 概述
客户信息管理系统是基于客户(王总)的超前的设计思想和简化二次开发客观需求,因此客户系统必须具有高度的可扩展性和适应性,并且是具有可配置的柔性系统,包括可定制的菜单,可定制的列表,可定制的表单;同时自动生成表单JS校验,自动生成CRUD(增,删,改查)SQL语句和变更更正审核SQL语句,并自动完成数据库操作。为了方便二次开发,适应新的业务需求和校验需求,我们还提供了柔性接口供实现。
2. 客户信息软件架构设计
客户信息管理系统设计分为数据库设计、软件概要设计及详细设计,其中数据库设计主要集中在模版组、模版信息的存储设计,动态菜单、数据字典的存储设计。软件设计包括模版及模版组信息的CRUD操作,基于模版信息的动态列表,动态表单,动态JS函数,定制JS函数,动态SQL,动态缺省数据,业务校验接口设计。
2.1. 显示模版设计
2.1.1. 模版数据库设计图(pdm):
2.1.2. 模版表间关系说明
从上图可以看出,模版组(TempletGroup)和模版组用户(TempletGroupUser)理论上是一对一关系,从而每个能管理客户信息的用户就拥有一个模版组,每个模版组包含若干个模版(Templet),每个模版对应与一个客户信息的业务表(TempletTable),每个模版对应多个模版字段(TempletField),模版字段中包括表单元素的显示属性,包括是否显示,是否必填,是否跨列显示,显示表单元素的类型(输入框,下拉框等),列表显示属性(显示的列名),及业务上的修改或变更是否需要审核等。因为客户关系管理系统的业务表对应多个模版,因此肯定有共有的属性,同样字段也有共有的属性,所以设计了TempletTable和TempletTableColumn两个表,同时这个TempletTable表还是定制菜单的基础数据。在理论上,一个用户拥有一个模版组,一个模版组拥有n个用户。
2.1.3. 模版表的详细设计
2.1.3.1. 表Templet的基本信息
2.1.3.2. 表Templet列
|
名称
|
注释
|
数据类型
|
文本说明
|
强制
|
|
templetId
|
模版项目ID
|
INTEGER
|
|
TRUE
|
|
templetTableId
|
模版表ID
|
INTEGER
|
对应templetTable
|
FALSE
|
|
templetGroupId
|
模版组ID
|
INTEGER
|
|
FALSE
|
|
templetCategoryId
|
模版类型ID
|
INTEGER
|
不使用
|
FALSE
|
|
templetDisplayName
|
模版显示名称
|
VARCHAR2(100)
|
|
FALSE
|
|
templetListJspFile
|
列表显示模版文件(暂不使用)
|
VARCHAR2(200)
|
不使用
|
FALSE
|
|
templetJspFile
|
对应的JSP文件名称和路径(暂不使用)
|
VARCHAR2(200)
|
不使用
|
FALSE
|
|
templetPageName
|
对应的页面名称(暂不使用)
|
VARCHAR2(200)
|
不使用
|
FALSE
|
|
templetDelegateClass
|
模版对应的代理类(暂不使用)
|
VARCHAR2(200)
|
不使用
|
FALSE
|
|
templetRanking
|
显示顺序
|
INTEGER
|
|
FALSE
|
|
templetExtend
|
模版扩展信息
|
VARCHAR2(200)
|
未使用
|
FALSE
|
|
templetTablePeriod
|
报表周期,年,季度,月,周,日
|
VARCHAR2(10)
|
未使用
|
FALSE
|
|
templetTablePromptPeriod
|
报表提示周期,年,季度,月,周,日
|
VARCHAR2(10)
|
未使用
|
FALSE
|
|
templetState
|
状态,1可用,0不可用
|
CHAR(1)
|
|
FALSE
|
2.1.3.3. 表TempletField的基本信息
|
名称
|
TempletField
|
|
注释
|
模版表字段明细
|
2.1.3.4. 表TempletField列
|
名称
|
注释
|
数据类型
|
文本说明
|
强制
|
|
fieldId
|
字段id
|
INTEGER
|
|
TRUE
|
|
templetTableColumnId
|
列流水号
|
INTEGER
|
对应templetTableColumn表
|
FALSE
|
|
templetId
|
模版项目ID
|
INTEGER
|
|
FALSE
|
|
columnName
|
数据库表列名(暂不使用)
|
VARCHAR2(100)
|
不使用
|
FALSE
|
|
fieldName
|
列名称(暂不使用)
|
VARCHAR2(100)
|
不使用
|
FALSE
|
|
fieldDisplayName
|
显示名称
|
CHAR(100)
|
|
FALSE
|
|
formTypyId
|
表单元素类型ID
|
INTEGER
|
|
FALSE
|
|
formSelectId
|
下拉表单对应的编码表ID
|
INTEGER
|
|
FALSE
|
|
formDefaultValue
|
表单元素默认值
|
VARCHAR2(200)
|
|
FALSE
|
|
formVerifyRuleId
|
表单元素校验规则ID
|
INTEGER
|
|
FALSE
|
|
formMaxlength
|
表单输入数据长度
|
INTEGER
|
|
FALSE
|
|
formWidth
|
表单元素宽度
|
INTEGER
|
|
FALSE
|
|
formHeight
|
表单元素高度
|
INTEGER
|
|
FALSE
|
|
formIsSpan
|
表单是否跨列显示,1是,0否
|
CHAR(1)
|
|
FALSE
|
|
isRequired
|
|