NCHR开发框架设计说明书.docx
- 文档编号:12618782
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:35
- 大小:81.18KB
NCHR开发框架设计说明书.docx
《NCHR开发框架设计说明书.docx》由会员分享,可在线阅读,更多相关《NCHR开发框架设计说明书.docx(35页珍藏版)》请在冰点文库上搜索。
NCHR开发框架设计说明书
NCHR开发框架
设计说明书
作者:
丁建昕王星曾诚
创建日期:
2005-12-15
修改日期:
2005-12-27
修改次数:
0
变更记录
变更日期
变更内容
变更原因
变更人
YYYY-MM-DD
目录
1.引言5
1.1.编写目的5
1.2.背景5
1.3.定义5
1.4.参考资料5
2.程序系统的结构6
2.1.横向来看6
2.2.纵向来看6
2.3.从框架开发者的角度6
2.4.从应用开发者的角度6
3.基础结构BaseUI相关类设计说明7
3.1.程序描述7
3.2.功能7
3.2.1.BaseUI类7
3.2.2.状态控制8
3.2.3.按钮管理9
3.2.4.动作管理10
3.2.5.数据持久化11
4.快速开发模板FrameUI相关类设计说明12
4.1.程序描述12
4.2.功能14
4.2.1.界面展现14
4.2.2.按钮和动作管理15
5.按钮管理ButtonManager相关类设计说明16
5.1.关键词16
5.2.功能说明16
5.3.按钮管理相关类16
5.3.1.类图17
5.3.2.ButtonManager类说明18
5.3.3.AbstractBtnRgst类说明19
5.3.4.ButtonStateRegister类说明21
5.3.5.StateRegister类说明22
6.MainBillCardPanel设计说明23
6.1.MainPanel父类说明23
6.1.1.MainPanel的设计意图23
6.1.2.MainPanel的方法说明23
6.2.MainBillCardPanel说明26
7.MainBillListPanel设计说明27
引言
编写目的
详细说明UIFrame的设计思想、层次结构、类之间的关系。
适用读者为UIFrame的开发者和使用者。
背景
针对界面开发中代码结构不合理的问题提供一个解决方案及规范。
定义
UIFrame:
框架名称
UI类:
界面入口程序
Panel:
组织存放各种控件
DataModel:
保存当前状态,发送状态信息;同服务器端通讯
按钮:
界面上菜单位置的按钮控件,不包括其它
动作:
点击按钮时要完成的事情
观察对象及被观察对象:
当被观察对象改变时,观察对象响应被观察对象的变化
状态:
界面响应用户的操作会导致控件状态变化:
可用、不可用、可见、不可见
注册:
将功能或是数据类以参数形式告知管理类,由管理类负责调用
参考资料
程序系统的结构
横向来看
UIFrame是以UI类作为程序的入口和控制中心,结合DataModel类进行状态控制,结合ButtonManager进行按钮控制。
同时以各个Panel为被控制单元,在各种动作类(Action)中进行调度。
纵向来看
UIFrame分为两个层次,以BaseUI为中心的相关类作为最上层,完成UIFrame的基本功能:
状态控制,按钮管理。
以FrameUI为中心的相关类继承于BaseUI,以模板形式提供额外的快速开发能力。
从框架开发者的角度
需要考虑的是如何为框架添加更多的快速开发能力,即继承BaseUI相关类,形成与FrameUI平行的各种模板类。
从应用开发者的角度
直接继承各种模板类,充分利用模板已经实现的各种功能,扩展自己的业务功能。
有一点需要特别注意:
严格禁止应用开发者继承BaseUI相关类。
基础结构BaseUI相关类设计说明
程序描述
BaseUI相关类组成UIFrame的基础结构,为所有其它UI相关类的父类,完成UIFrame的最基本功能。
涉及类:
BaseUI、DataModel、ButtonManager、StateRegister、AbstractButtonRegister、ButtonStateRegister、StateChangeEvent
类名
描述
父类
接口
BaseUI
程序入口,负责调度所有资源,包括DataModel、ButtonManager
ToftPanel
DataModel
保存当前状态,发送状态事件;同后台通讯
ButtonManager
管理全部按钮,包括其名称、动作、状态
StateChangeLister
StateRegister
状态列表
AbstractButtonRegister
按钮列表
ButtonStateRegister
按钮对应状态列表
StateChangeEvent
状态事件
EventObject
涉及接口StateChangeListener、ICommand
接口名
描述
父接口
StateChangeListener
响应状态改变
EventListener
ICommand
响应按钮动作
功能
BaseUI类
程序入口,继承于ToftPanel,界面的控制中心,负责调度界面的所有资源,包括按钮、Panel、DataModel,组织各个Panel,获得了BaseUI的引用即获得了掌控界面资源的入口。
BaseUI并不直接操纵各种控件,按钮的处理交给ButtonManager负责,控件的处理交给各个子Panel负责,状态及数据持久化交给DataModel负责。
这些类的实例化都在BaseUI类中进行,以下是BaseUI中创建他们的方法,可以根据业务不同在BaseUI的子类中进行重写,具体使用方法参考javadoc。
方法名称
参数
返回值
描述
createDataModel
DataModel
根据业务不同,创建DataModel的子类,例如要实现复杂查询
createButtonStateRegister
ButtonStateRegister
根据业务不同,创建ButtonStateRegister的子类,例如自定义按钮的状态
createBtnRegister
AbstractButtonRegister
根据业务不同,创建AbstractButtonRegister的子类,例如自定义按钮
注:
ButtonManager不需要开发者创建,由getBtnManager方法进行实例化,createButtonStateRegister和createBtnRegister作为ButtonManager构造方法的参数传到ButtonManager中。
BaseUI中的其它方法
方法名称
参数
返回值
描述
getTitle
返回界面标题
重写父类方法,默认返回在功能节点上注册的名字,如有不同可在子类中重写
OnButtonClicked
点击按钮时调用
重写父类方法,将按钮操作转移到ButtonManager,不允许子类重写
setButtons
设置按钮
重写父类方法,扩大其可视范围,不允许子类重写
updateButtons
更新按钮
重写父类方法,扩大其可视范围,不允许子类重写
状态控制
涉及DataModel、StateChangeListener、StateChangeEvent、StateRegister,状态控制还包括按钮状态,在此处不做详细介绍,请参考ButtonManager说明。
状态控制的原理主要是采用事件发送、监听机制。
需要状态控制的类实现StateChangeListener接口,当调用DataModel的setCurrentState方法时,将状态事件StateChangeEvent发送到实现StateChangeListener接口的类,这些类将自动响应状态的变化。
StateChangeListener类中的方法只有一个stateChanged
方法名称
参数
返回值
描述
stateChanged
StateChangeEvent
实现StateChangeListener接口的类需要在这个方法中填写业务相关的状态设置
StateChangeEvent中的方法主要是设置、获取当前状态,当实现了StateChangeListener的类在方法中获得了StateChangeEvent实例,就可获得当前的状态
方法名称
参数
返回值
描述
getCurrentState
返回当前状态
获得当前状态
setCurrentState
Int
设置当前状态
由DataModel进行调用,开发者不用调用
StateRegister主要用于状态列表,如果有自定义状态列表,需要继承实现自己的状态列表,在子类中添加静态常量,重写getAllStateIDs方法,StateRegister类的初始化是在DataModel的createState方法中进行
方法名称
参数
返回值
描述
getCurrentState
返回当前状态
由DataModel进行调用,开发者不用调用
setCurrentState
Int
设置当前状态
由DataModel进行调用,开发者不用调用
getAllStateIDs
int[]
获得当前界面所用的状态列表
由子类重写,返回业务所需状态列表
DataModel类关于状态方面的功能主要是保存当前状态,此处只介绍状态方面的方法,数据持久化的方法在数据持久化一节中介绍
方法名称
参数
返回值
描述
addStateChangeListener
StateChangeListener
添加状态监听
removeStateChangeListener
StateChangeListener
删除状态监听
fireStateChanged
发送状态事件,由DataModel自身调用
setCurrentState
Int
设置当前状态,同时将状态改变发送出去
getCurrentState
int
获取当前状态,与状态事件中的状态是一致的
createState
StateRegister
创建StateRegister,由子类重写,实现业务需要的状态列表
getState
StateRegister
获得StateRegister
setState
StateRegister
设置StateRegister
按钮管理
界面上的按钮统一由ButtonManager控制,包括按钮的名称、状态、动作,ButtonManager的实例化由BaseUI进行,不用开发者参与。
但是ButtonManager的参数需要开发者在BaseUI的子类中实现,请参考BaseUI一节和ButtonManager一节获取详细信息。
动作管理
动作管理实际上是按钮管理的一部分,当点击按钮所要做的事情是由ButtonManager负责调度的。
ButtonManager的调度过程请参考ButtonManager一节,此处主要讨论ICommand接口。
每个按钮动作都实现了ICommand接口,开发人员不必关心如何执行业务逻辑的调用,只需要实现ICommand接口的execute方法,并将动作注册到ButtonManager即可。
从而简化开发模型,减少出错机率。
每个按钮的名称将同按钮的动作相分离,提高了灵活性。
每个动作都可重用,增加了可维护性。
方法名称
参数
返回值
描述
execute
执行业务逻辑
validate
boolean
执行前进行校验,返回true则调用execute,false则不调用
AbstractAction实现了ICommand接口,提供了一些基本方法的实现。
方法名称
参数
返回值
描述
getFrameUI
FrameUI
获取FrameUI
getMainPanel
MainPanel
获取MainPanel
getDataModel
DataModel
获取DataModel
validate
boolean
动作执行前校验,空方法,子类重写,可用于前台校验
getCheckMethod
String
子类继承,返回一个包含类名和类中一个方法的字符串,共后台校验使用,字符串中包含的类应该放在bs端
数据持久化
数据持久化操作全部集中在DataModel中进行,方便自动单元测试。
以下论述只涉及到DataModel的持久化方法,状态相关方法请参考状态控制一节。
方法名称
参数
返回值
描述
onDelete
Object
boolean
删除数据,空方法,由子类继承后重写
onQuery
Class,String
SuperVO[]
查询数据,用于单表查询,Class指明表对应的VO,String指明查询条件,空方法,由子类继承后重写
onSave
Object
Object
保存数据,空方法,由子类继承后重写,返回保存的数据
queryDataByHeadVO
SuperVO,String
HRAggVO
根据主表数据查询,返回主表及子表数据,空方法,由子类继承后重写
快速开发模板FrameUI相关类设计说明
程序描述
FrameUI相关类继承了BaseUI相关类,除了保留父类的状态控制、按钮管理的功能外,还提供了模板式的快速开发能力。
主要表现在:
标准按钮动作的实现、标准状态控制、标准界面类型,特别是针对单据模板提供了MainBillListPanel和MainBillCardPanel两个类处理单据模板相关操作(请参考MainBillListPanel和MainBillCardPanel两节内容)。
FrameUI针对HR界面特点,将界面分为几个部分:
按钮下的导航条TopPanel、左边的导航栏LeftPanel(可能是树、表或列表)、数据的主要显示界面MainPanel。
其中MainPanel必须存在,TopPanel、LeftPanel可以根据用户设置决定是否存在。
MainPanel中可以存放标准的单据模板,也可以存放各种控件,提供最大的灵活性。
对界面的操作是以Panel为单元进行的,即按钮动作不直接调用Panel中每个控件的设置方法,而是调用Panel中的方法,由Panel自己在调用其中的控件设置方法,这是为了减少动作和Panel之间的耦合,同时可减少动作的数量,开发者应当注意。
换个说法就是尽量把Panel作为一个控件来用。
涉及界面类:
FrameUI、MainPanel、LeftPanel、TopPanel、MainBillListPanel、MainBillCardPanel、LeftTreePanel、LeftTablePanel、LeftListPanel
类名
描述
父类
接口
FrameUI
程序入口,资源控制中心,组合各个Panel类
BaseUI
MainPanel
显示数据详细信息,点击LeftPanel时自动响应点击事件
UIPanel
StateChangeListener,Observer
LeftPanel
导航树,或表,或列表
UIPanel
StateChangeListener
TopPanel
导航栏,可以存放查询的前置条件
UIPanel
StateChangeListener
MainBillListPanel
封装BillListPanel
MainPanel
MainBillCardPanel
封装BillCardPanel
MainPanel
LeftTreePanel
导航树
LeftPanel
LeftTablePanel
导航表
LeftPanel
LeftListPanel
导航列表
LeftPanel
涉及数据持久化类BillDataModel,此类继承了DataModel,重写了其中的空方法。
类名
描述
父类
接口
BillDataModel
其数据持久化的相关方法主要针对单据模板,如果不是这样,子类应当重写
DataModel
涉及动作类AddAction、AddLineAction、CancelAction、DeleteAction、DeleteLineAction、EditAction、EditLineAction、PrintAction、QueryAction、RefreshAction、SaveAction,每个动作都对应一个按钮,使用时需要在ButtonManager中进行注册。
类名
描述
父类
接口
AddAction
新增,只是清空界面数据
AbstractAction
AddLineAction
增加行,为表格添加一个空行
AbstractAction
CancelAction
取消,取消新增或编辑
AbstractAction
DeleteAction
删除,删除界面数据同时删除后台数据
AbstractAction
DeleteLineAction
删除行,删除表格中的一行
AbstractAction
EditAction
编辑,将数据填充到界面,同时设置界面控件可用
AbstractAction
EditLineAction
编辑行
AbstractAction
PrintAction
打印,调用单据模板的打印功能,如果没有使用单据模板则需要自己实现
AbstractAction
QueryAction
查询,调用查询模板查询数据,同时更新界面数据
AbstractAction
RefreshAction
刷新,重新查询数据填充到界面
AbstractAction
SaveAction
保存,将修改或新增的数据持久化
AbstractAction
涉及工具类TreeUtilities
类名
描述
父类
接口
TreeUtilities
对树操作的工具类,包括创建DefaultTreeModel,添加、删除、查找节点,在DefaultTreeModel上放的树节点类型为DefualtMutableTreeNode的子类FrameTreeNode,其中的UserObject放的是HRAggVO
涉及其它类FrameTreeNode、HRAggVO
类名
描述
父类
接口
FrameTreeNode
对DefaultMutableTreeNode的重新包装,用于将SuperVO直接转化成具有父子关系的树节点
DefaultMutableTreeNode
HRAggVO
对单据模板VO的实现类
ExtendedAggregatedValueObject
功能
界面展现
涉及类:
FrameUI、MainPanel、LeftPanel、TopPanel、MainBillListPanel、MainBillCardPanel、LeftTreePanel、LeftTablePanel、LeftListPanel。
FrameUI类是整个界面的核心,负责组织MainPanel、LeftPanel、TopPanel,初始化按钮。
方法名称
参数
返回值
描述
createLeftPanel
LeftPanel
默认返回LeftTreePanel,如果需要其它类型则需要在子类中重写此方法,返回LeftPanel子类
createMainPanel
MainPanel
默认返回MainPanel,如果需要其它类型则需要在子类中重写此方法,返回MainPanel子类
createTopPanel
TopPanel
默认返回TopPanel,如果需要其它类型则需要在子类中重写此方法,返回TopPanel子类
initButtons
此方法为抽象方法,子类在此实现初始化按钮
initialize
此方法初始化各个Panel和按钮
getSplitPane
创建UISplitPane,为私有方法,开发者无需关心
needLeftPanel
boolean
抽象方法,设置是否使用LeftPanel,由开发者实现,true为需要,false为不需要
needTopPanel
boolean
抽象方法,设置是否使用TopPanel,由开发者实现,true为需要,false为不需要
FrameUI还负责打印模板、查询模板的配置工作。
如果一个节点有多个查询模板,则在使用QueryAction之前应当设置好FrameUI的queryNodeKey属性,如果有常用查询条件,还要设置对应queryNodeKey的常用查询的UIPanel;同样,如果一个节点有多个打印模板,则在使用PrintAction之前应当设置好FrameUI的printNodeKey属性。
方法名称
参数
返回值
描述
getQueryDialog
QueryConditionClient
返回查询模板,程序自动根据功能注册的节点号,设置的nodeKey查找查询模板
getNormalQueryPanel
UIPanel
返回常用查询UIPanel
setNormalQueryPanel
UIPanel
设置常用查询UIPanel
getQueryNodeKey
String
返回查询模板nodeKey
setQueryNodeKey
String
设置查询模板nodeKey
getPrintNodeKey
String
返回打印模板nodeKey
setPrintNodeKey
String
设置打印模板nodeKey
MainPanel类中的方法大多为空方法,MainBillListPanel、MainBillCardPanel为针对两种单据模板的MainPanel的实现类,具体使用请参考相关章节。
按钮和动作管理
按钮和动作管理的工作在ButtonManager中进行,具体使用请参考ButtonManager一节。
按钮管理ButtonManager相关类设计说明
关键词
系统按钮:
在AbstractBtnRgst类中以静态常量方式注册的按钮常量所代表的按钮,我们叫做系统按钮,当然并不是每一个系统按钮都会被系统管理起来,系统默认管理的系统按钮只包括
SYSBTN_QUERY 查询
SYSBTN_ADD增加
SYSBTN_EDIT修改
SYSBTN_SUBOPERATION子集操作
SYSBTN_ADD_LINE增行
SYSBTN_DEL_LINE删行
SYSBTN_INSERT_LINE插入行
SYSBTN_EDIT_LINE修改行
SYSBTN_SAVE保存
SYSB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NCHR 开发 框架 设计 说明书