NCHR开发框架设计说明书.doc_第1页
NCHR开发框架设计说明书.doc_第2页
NCHR开发框架设计说明书.doc_第3页
NCHR开发框架设计说明书.doc_第4页
NCHR开发框架设计说明书.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NCHRNCHR 开发框架开发框架 设计设计说明书说明书文章标题文章标题 作作 者 者 丁建昕丁建昕 王星王星 曾诚曾诚 创建日期 创建日期 2005 xx12 xx15 修改日期 修改日期 2005 xx12 27xx 修改次数 修改次数 0 变更记录变更记录 标题 第 27 2 页 变更日期变更日期变更内容变更内容变更原因变更原因变更人变更人 YYYY MM DD 标题 第 27 3 页 目目 录录 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 标题 第 27 4 页 7 MAINBILLLISTPANEL 设计说明设计说明 27 1200 标题 第 27 5 页 引言 1 1 编写目的编写目的 详细说明 UIFrame 的设计思想 层次结构 类之间的关系 适用读者为 UIFrame 的开发者和使用者 1 2 背景背景 针对界面开发中代码结构不合理的问题提供一个解决方案及规范 1 3 定义定义 UIFrame 框架名称 UI 类 界面入口程序 Panel 组织存放各种控件 DataModel 保存当前状态 发送状态信息 同服务器端通讯 按钮 界面上菜单位置的按钮控件 不包括其它 动作 点击按钮时要完成的事情 观察对象及被观察对象 当被观察对象改变时 观察对象响应被观察对象的变化 状态 界面响应用户的操作会导致控件状态变化 可用 不可用 可见 不可见 注册 将功能或是数据类以参数形式告知管理类 由管理类负责调用 1 4 参考资料参考资料 标题 第 27 6 页 程序系统的结构 2 1 横向来看横向来看 UIFrame 是以 UI 类作为程序的入口和控制中心 结合 DataModel 类进行状态控制 结合 ButtonManager 进行按钮控制 同时以各个 Panel 为被控制单元 在各种动作类 Action 中进行调度 2 2 纵向来看纵向来看 UIFrame 分为两个层次 以 BaseUI 为中心的相关类作为最上层 完成 UIFrame 的基 本功能 状态控制 按钮管理 以 FrameUI 为中心的相关类继承于 BaseUI 以模板形式提 供额外的快速开发能力 2 3 从框架开发者的角度从框架开发者的角度 需要考虑的是如何为框架添加更多的快速开发能力 即继承 BaseUI 相关类 形成与 FrameUI 平行的各种模板类 2 4 从应用开发者的角度从应用开发者的角度 直接继承各种模板类 充分利用模板已经实现的各种功能 扩展自己的业务功能 有一点需要特别注意 严格禁止应用开发者继承 BaseUI 相关类 标题 第 27 7 页 基础结构 BaseUI 相关类设计说明 3 1 程序描述程序描述 ToftPanel B Ba as se eU UI I h hr r u ui if fr ra amme e mmo od de el l D Da at ta aMMo od de el lStateChangeListener b bu ut tt to on n B Bu ut tt to on nMMa an na ag ge er r BaseUI 相关类组成 UIFrame 的基础结构 为所有其它 UI 相关类的父类 完成 UIFrame 的最基本功能 涉及类 BaseUI DataModel ButtonManager StateRegister AbstractButtonRegister Button StateRegister StateChangeEvent 类名描述父类接口 BaseUI 程序入口 负责调度所有 资源 包括 DataModel ButtonManag er ToftPanel DataModel 保存当前状态 发送状态 事件 同后台通讯 ButtonManager 管理全部按钮 包括其名 称 动作 状态 StateChangeLister StateRegister 状态列表 AbstractButtonRegister 按钮列表 ButtonStateRegister 按钮对应状态列表 StateChangeEvent 状态事件 EventObject 涉及接口 StateChangeListener ICommand 接口名描述父接口 StateChangeListener 响应状态改变 EventListener ICommand 响应按钮动作 3 2 功能功能 3 2 1 BaseUI 类类 程序入口 继承于 ToftPanel 界面的控制中心 负责调度界面的所有资源 包括按 钮 Panel DataModel 组织各个 Panel 获得了 BaseUI 的引用即获得了掌控界面资源的 标题 第 27 8 页 入口 BaseUI 并不直接操纵各种控件 按钮的处理交给 ButtonManager 负责 控件的处理 交给各个子 Panel 负责 状态及数据持久化交给 DataModel 负责 这些类的实例化都在 BaseUI 类中进行 以下是 BaseUI 中创建他们的方法 可以根 据业务不同在 BaseUI 的子类中进行重写 具体使用方法参考 javadoc 方法名称参 数 返回值描述 createDataModelDataModel 根据业务不同 创建 DataModel 的子类 例如 要实现复杂查询 createButtonStateRegisterButtonStateRegister 根据业务不同 创建 ButtonStateRegister 的 子类 例如自定义按钮的 状态 createBtnRegisterAbstractButtonRegister 根据业务不同 创建 AbstractButtonRegister 的子类 例如自定义按钮 注 ButtonManager 不需要开发者创建 由 getBtnManager 方法进行实例化 createButtonStateRegister 和 createBtnRegister 作为 ButtonManager 构造方法的参数 传到 ButtonManager 中 BaseUI 中的其它方法 方法名称参数返回值描述 getTitle 返回界面标题重写父类方法 默认 返回在功能节点上注 册的名字 如有不同 可在子类中重写 OnButtonClicked 点击按钮时调用重写父类方法 将按 钮操作转移到 ButtonManager 不允 许子类重写 setButtons 设置按钮重写父类方法 扩大 其可视范围 不允许 子类重写 updateButtons 更新按钮重写父类方法 扩大 其可视范围 不允许 子类重写 3 2 2 状态控制状态控制 涉及 DataModel StateChangeListener StateChangeEvent StateRegister 状态 控制还包括按钮状态 在此处不做详细介绍 请参考 ButtonManager 说明 状态控制的原理主要是采用事件发送 监听机制 需要状态控制的类实现 StateChangeListener 接口 当调用 DataModel 的 setCurrentState 方法时 将状态事件 StateChangeEvent 发送到实现 StateChangeListener 接口的类 这些类将自动响应状态的 变化 StateChangeListener 类中的方法只有一个 stateChanged 方法名称参数返回值描述 标题 第 27 9 页 stateChangedStateChangeEvent 实现 StateChangeListener 接口的类需要在这个 方法中填写业务相关 的状态设置 StateChangeEvent 中的方法主要是设置 获取当前状态 当实现了 StateChangeListener 的类在方法中获得了 StateChangeEvent 实例 就可获得当前的状态 方法名称参数返回值描述 getCurrentState 返回当前状态获得当前状态 setCurrentStateInt 设置当前状态由 DataModel 进行调 用 开发者不用调用 StateRegister 主要用于状态列表 如果有自定义状态列表 需要继承实现自己的状 态列表 在子类中添加静态常量 重写 getAllStateIDs 方法 StateRegister 类的初始化 是在 DataModel 的 createState 方法中进行 方法名称参数返回值描述 getCurrentState 返回当前状态由 DataModel 进行调 用 开发者不用调用 setCurrentStateInt 设置当前状态由 DataModel 进行调 用 开发者不用调用 getAllStateIDsint 获得当前界面所用 的状态列表 由子类重写 返回业 务所需状态列表 DataModel 类关于状态方面的功能主要是保存当前状态 此处只介绍状态方面的方法 数据持久化的方法在数据持久化一节中介绍 方法名称参数返回值描述 addStateChangeListenerStateChangeListener 添加状态监听 removeStateChangeListenerStateChangeListener 删除状态监听 fireStateChanged 发送状态事件 由 DataModel 自 身调用 setCurrentStateInt 设置当前状态 同时将状态改变 发送出去 getCurrentStateint 获取当前状态 与状态事件中的 状态是一致的 createStateStateRegister 创建 StateRegister 由子类重写 实 现业务需要的状 态列表 getStateStateRegister 获得 StateRegister setStateStateRegister 设置 StateRegister 3 2 3 按钮管理按钮管理 界面上的按钮统一由 ButtonManager 控制 包括按钮的名称 状态 动作 标题 第 27 10 页 ButtonManager 的实例化由 BaseUI 进行 不用开发者参与 但是 ButtonManager 的参数需 要开发者在 BaseUI 的子类中实现 请参考 BaseUI 一节和 ButtonManager 一节获取详细信 息 3 2 4 动作管理动作管理 interface h hr r u ui if fr ra amme e a ac ct ti io on n I IC Co ommmma an nd d u ui if fr ra amme e a ac ct ti io on n E Ed di it tL Li in ne eA Ac ct ti io on n a ac ct ti io on n D De el le et te eL Li in ne eA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n P Pr ri in nt tA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n S Sa av ve eA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n A Ad dd dA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n A Ab bs st tr ra ac ct tA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n A Ad dd dL Li in ne eA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n C Ca an nc ce el lA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n E Ed di it tA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n R Re ef fr re es sh hA Ac ct ti io on n h hr r u ui if fr ra amme e a ac ct ti io on n Q Qu ue er ry yA Ac ct ti io on n u ui if fr ra amme e a ac ct ti io on n D De el le et te eA Ac ct ti io on n 动作管理实际上是按钮管理的一部分 当点击按钮所要做的事情是由 ButtonManager 负责调度的 ButtonManager 的调度过程请参考 ButtonManager 一节 此处主要讨论 ICommand 接口 每个按钮动作都实现了 ICommand 接口 开发人员不必关心如何执行业务逻辑的调用 只需要实现 ICommand 接口的 execute 方法 并将动作注册到 ButtonManager 即可 从而简 化开发模型 减少出错机率 每个按钮的名称将同按钮的动作相分离 提高了灵活性 每个动作都可重用 增加 了可维护性 方法名称参数返回值描述 execute 执行业务逻辑 validateboolean 执行前进行校验 返 回 true 则调用 execute false 则不 调用 AbstractAction 实现了 ICommand 接口 提供了一些基本方法的实现 方法名称参数返回值描述 getFrameUIFrameUI 获取 FrameUI getMainPanelMainPanel 获取 MainPanel getDataModelDataModel 获取 DataModel validateboolean 动作执行前校验 空 标题 第 27 11 页 方法 子类重写 可 用于前台校验 getCheckMethodString 子类继承 返回一个 包含类名和类中一个 方法的字符串 共后 台校验使用 字符串 中包含的类应该放在 bs 端 3 2 5 数据持久化数据持久化 数据持久化操作全部集中在 DataModel 中进行 方便自动单元测试 以下论述只涉 及到 DataModel 的持久化方法 状态相关方法请参考状态控制一节 方法名称参数返回值描述 onDeleteObjectboolean 删除数据 空方法 由子类继承后重写 onQuery Class String SuperVO 查询数据 用于单表 查询 Class 指明表 对应的 VO String 指 明查询条件 空方法 由子类继承后重写 onSaveObjectObject 保存数据 空方法 由子类继承后重写 返回保存的数据 queryDataByHeadVO SuperVO String HRAggVO 根据主表数据查询 返回主表及子表数据 空方法 由子类继承 后重写 标题 第 27 12 页 4 快速开发模板快速开发模板 FrameUI 相关类设计说明相关类设计说明 4 1 程序描述程序描述 BaseUI F Fr ra amme eU UI I UIPanel StateChangeListener T To op pP Pa an ne el l UIPanel StateChangeListener L Le ef ft tP Pa an ne el l UIPanel StateChangeListener Observer MMa ai in nP Pa an ne el l i immp pl l MMa ai in nB Bi il ll lC Ca ar rd dP Pa an ne el l BillEditListener BillEditListener2 u ui if fr ra amme e i immp pl l MMa ai in nB Bi il ll lL Li is st tP Pa an ne el l h hr r u ui if fr ra amme e i immp pl l L Le ef ft tT Tr re ee eP Pa an ne el l u ui if fr ra amme e i immp pl l L Le ef ft tT Ta ab bl le eP Pa an ne el l h hr r u ui if fr ra amme e i immp pl l L Le ef ft tL Li is st tP Pa an ne el l 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 标题 第 27 13 页 类名描述父类接口 FrameUI 程序入口 资源控制中心 组合各个 Panel 类 BaseUI MainPanel 显示数据详细信息 点击 LeftPanel 时自动响应点 击事件 UIPanel StateChangeListener Observer LeftPanel 导航树 或表 或列表 UIPanelStateChangeListener TopPanel 导航栏 可以存放查询的 前置条件 UIPanelStateChangeListener MainBillListPanel 封装 BillListPanel MainPanel MainBillCardPanel 封装 BillCardPanel MainPanel LeftTreePanel 导航树 LeftPanel LeftTablePanel 导航表 LeftPanel LeftListPanel 导航列表 LeftPanel 涉及数据持久化类 BillDataModel 此类继承了 DataModel 重写了其中的空方法 类名描述父类接口 BillDataModel 其数据持久化的相关方法主要针对 单据模板 如果不是这样 子类应 当重写 DataModel 涉及动作类 AddAction AddLineAction CancelAction DeleteAction DeleteLineAction EditAct ion 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 其中的 标题 第 27 14 页 UserObject 放的是 HRAggVO 涉及其它类 FrameTreeNode HRAggVO 类名描述父类接口 FrameTreeNode 对 DefaultMutableTreeNode 的重新包装 用于将 SuperVO 直接转化成具有父 子关系的树节点 DefaultMutableTreeNode HRAggVO 对单据模板 VO 的实现类 ExtendedAggregatedValueObject 4 2 功能功能 4 2 1 界面展现界面展现 涉及类 FrameUI MainPanel LeftPanel TopPanel MainBillListPanel MainBillCardPanel LeftTreePanel LeftTablePanel LeftListPanel FrameUI 类是整个界面的核心 负责组织 MainPanel LeftPanel TopPanel 初始 化按钮 方法名称参数返回值描述 createLeftPanelLeftPanel 默认返回 LeftTreePanel 如果 需要其它类型则需要 在子类中重写此方法 返回 LeftPanel 子类 createMainPanelMainPanel 默认返回 MainPanel 如果需要 其它类型则需要在子 类中重写此方法 返 回 MainPanel 子类 createTopPanelTopPanel 默认返回 TopPanel 如果需要其它类型则 需要在子类中重写此 方法 返回 TopPanel 子类 initButtons 此方法为抽象方法 子类在此实现初始化 按钮 initialize 此方法初始化各个 Panel 和按钮 getSplitPane 创建 UISplitPane 为私有方法 开发者 无需关心 needLeftPanelboolean 抽象方法 设置是否 使用 LeftPanel 由 开发者实现 true 为 需要 false 为不需 标题 第 27 15 页 要 needTopPanelboolean 抽象方法 设置是否 使用 TopPanel 由开 发者实现 true 为需 要 false 为不需要 FrameUI 还负责打印模板 查询模板的配置工作 如果一个节点有多个查询模板 则 在使用 QueryAction 之前应当设置好 FrameUI 的 queryNodeKey 属性 如果有常用查询条件 还要设置对应 queryNodeKey 的常用查询的 UIPanel 同样 如果一个节点有多个打印模板 则在使用 PrintAction 之前应当设置好 FrameUI 的 printNodeKey 属性 方法名称参数返回值描述 getQueryDialogQueryConditionClient 返回查询模板 程 序自动根据功能注 册的节点号 设置 的 nodeKey 查找查 询模板 getNormalQueryPanelUIPanel 返回常用查询 UIPanel setNormalQueryPanelUIPanel 设置常用查询 UIPanel getQueryNodeKeyString 返回查询模板 nodeKey setQueryNodeKeyString 设置查询模板 nodeKey getPrintNodeKeyString 返回打印模板 nodeKey setPrintNodeKeyString 设置打印模板 nodeKey MainPanel 类中的方法大多为空方法 MainBillListPanel MainBillCardPanel 为 针对两种单据模板的 MainPanel 的实现类 具体使用请参考相关章节 4 2 2 按钮和动作管理按钮和动作管理 按钮和动作管理的工作在 ButtonManager 中进行 具体使用请参考 ButtonManager 一节 标题 第 27 16 页 按钮管理 ButtonManager 相关类设计说明 5 1 关键词关键词 系统按钮系统按钮 在 AbstractBtnRgst 类中以静态常量方式注册的按钮常量所代表的按钮 我们 叫做系统按钮 当然并不是每一个系统按钮都会被系统管理起来 系统默认管理的系统按钮 只包括 SYSBTN QUERY 查询 SYSBTN ADD增加 SYSBTN EDIT修改 SYSBTN SUBOPERATION子集操作 SYSBTN ADD LINE增行 SYSBTN DEL LINE删行 SYSBTN INSERT LINE插入行 SYSBTN EDIT LINE修改行 SYSBTN SAVE保存 SYSBTN CANCEL取消 SYSBTN DELETE删除 SYSBTN REFRESH刷新 SYSBTN PRINT打印 自定义按钮自定义按钮 除去系统按钮 其他所有用户添加的按钮都属于自定义按钮 动作动作 命令命令 指一些业务相关的一系列操作的集合 比如 保存 删除 封存解封等 5 2 功能说明功能说明 ButtonManager 主要的功能包括两部分 第一部分是按钮状态管理 这里的按钮状 态主要是指按钮的可用性和可见性 第二部分是所有框架事件的响应 这些事件指广义事 件 可以是按钮事件 也可以不是按钮事件 5 3 按钮管理相关类按钮管理相关类 下表列出了按钮管理的主要相关类 类名描述父类接口 ButtonManager 负责按钮管理的实体类 StateChangeListener AbstractBtnRgst 按钮注册类 所有的在系统 按钮注册在基类 AbstractBtnRgst 中 各个模 块的自定义按钮注册在具体 标题 第 27 17 页 的子类之中 ButtonStateRegister 负责注册按钮在一个具体状 态下的具体行为 包括可用 可视两种属性 StateRegister 状态注册类 负责注册状态 列表 5 3 1 类图类图 A Ab bs st tr ra ac ct tB Bu ut tt to on nR Re eg gi is st te er r isContainBtnID boolean AbstractButtonRegister createSysBtnVOByID ButtonVO createUserBtnVOByID ButtonVO B Bu ut tt to on nS St ta at te eR Re eg gi is st te er r ButtonStateRegister addStateVO void getButtonStateVOByStateID ButtonStateVO addUserButtonStateVO void addSystemButtonStateVO void StateChangeListener B Bu ut tt to on nMMa an na ag ge er r ButtonManager isCommandExecutable boolean isCommandExecutable boolean executeCommand void executeCommand void loadState void isValidBtnsID boolean registerCommand void registerCommand void addStatusVO boolean addChildButtonByVO boolean addButtonByVO boolean setButtonEnabled void setButtonVisiable void addChildButtonsByIDs boolean addButtonByID boolean finishButtons void getButtonByID ButtonObject getButtonStateVOByID ButtonStateVO stateChanged void interface u ui if fr ra amme e a ac ct ti io on n I IC Co ommmma an nd d execute void executable boolean ToftPanel n nc c u ui i h hr r u ui if fr ra amme e B Ba as se eU UI I BaseUI createDataModel DataModel createButtonStateRegister ButtonStateRegister createBtnRegister AbstractButtonRegister onButtonClicked void updateButtons void handleException void s st ta at te e S St ta at te eR Re eg gi is st te er r STATE INIT int STATE EDIT int STATE ADD int STATE CANCEL int STATE NOTEDIT int STATE ROOT SELECTED int STATE FOLDER SELECTED int STATE LEAF SELECTED int allStates int p pe e p pu ub b P PE EB Bu ut tt to on nR Re eg gi is st te er r createUserBtnVOByID ButtonVO 注意 以上类图中的 PEButtonRegister 类是为了让类图更完整 引入的一个具体实现类 说明抽象类 AbstractButtonRegister 是必须要有子类来继承的 下面为其中的一些核心类做简要说明 5 3 2 ButtonManager 类说明类说明 ButtonManager 类是整个按钮管理的核心功能 他负责具体管理按钮的行为 所有 的按钮实例都由这个类来维护 ButtonManager 类不需要开发人员继承 ButtonManager 还 标题 第 27 18 页 负责整个框架的事件响应的处理 具体处理模式见后面 ButtonManager 类中集中了两种模式 一种是按钮状态模式 一种是事件响应模式 首先我们分析按钮状态模式 对外提供的添加按钮方法有三个 方法名称参数返回值描述 addButtonByID int btnID 按钮 ID boolean 是否添加 成功 按照指定的 BtnID 加 入 Button 注意按钮 加入的顺序就是按钮 显示的顺序 addChildButtonsByIDs int parBtnID 父 按钮 ID int childBtnIDs 孩 子按钮的 数 组 boolean 是否添加 成功 按照指定的 BtnID 和 指定的 BtnID 数组加 入一个按钮的子按钮 数组 finishButtons 停止加入按钮 把现 在已经加上的按钮加 入 parUI 并显示在 界面上 上述 个接口提供了在 ButtonManager 里添加按钮的方法 下面三个接口提供了对 按钮状态的修改方法 在实现方面 按钮的默认状态是可见而不可用 开发时要注意这一 点 方法名称参数返回值描述 setButtonState int iStateID 系 统注册的状态 ID 设置按钮的状态 本 状态必须为 StateRegister 类或 者子类里注册的一种 状态 设置完状态之 后 ButtonManager 会自动改变按钮的状 态 setButtonEnabled int btnID 按钮 ID boolean enbd 是 否可用 根据按纽 ID 设置按纽 是否可用 本方法直 接修改按钮是否可用 和框架注册状态无关 setButtonVisiable int btnID 按钮 ID boolean vzab 是 否可见 根据按纽 ID 设置按纽 是否可见 本方法直 接修改按钮是否可见 和框架注册状态无关 以上六个方法就是 ButtonManager 中对于按钮状态的接口 接下来描述一下事件响应模式的接口 方法名称参数返回值描述 registerCommandObject comKey 命令响应对应的 注册一个命令 Key 和 一个 Command 组成的 标题 第 27 19 页 主键 ICommand com 事 件响应的接口实 例 值对 注意此注册为 覆盖式注册 即后面 的注册会覆盖前面的 注册 registerCommand int btnID 按钮 的对应 ID ICommand com 事 件响应的接口实 例 本接口是为了方便按 钮事件注册而加入的 重载接口 注册一个 BtnID 和一个 Command 组成的值对 注意此 注册为覆盖式注册 即后面的注册会覆盖 前面的注册 executeCommandObject comKey 命令响应对应的 主键 根据命令 Key 来执行 一个命令实例 如果 命令实例不存在 则 不做任何操作 executeCommand int btnID 事件 对应的按钮 ID 本接口是为了方便按 钮事件而加入的重载 接口 根据 btnID 来 执行一个命令实例 如果命令实例不存在 则不做任何操作 以上四个接口构成了事件注册和事件执行的体系 需要注意的一点就是 Icommand 接口的一个校验方法 boolean validate throws ValidationException 这个方法会在 executeCommand 方法中被调用 用来执行与这个动作相关的业务校验 如果校验不通过 那么会以异常的形式抛出校验出错的信息 5 3 3 AbstractBtnRgst 类说明类说明 AbstractBtnRgst 类是按钮注册管理类 AbstractBtnRgst 及其子类里里面注册了 所有用到的按钮 AbstractBtnRgst 注册的是框架的默认按钮 AbstractBtnRgst 的一个具体实现子 类并不是对应于一个功能节点 我们推荐的模式是每一个功能模块对应一个 AbstractBtnRgst 具体实现子类 这样就统一了模块的按钮注册 而且也避免了整个 HR 产 品所有按钮注册在一起导致文件过大的问题 子类中 例如 AbstractBtnRgst 就是绩效模 块的具体实现类 注册了本模块需要的用到的所有自定义按钮 按钮分类掩码 BTNMASK SYSTEM 0 x0 BTNMASK USER 0 xff 以上两个常量决定了系统按钮的数量不能超过 0 xff 也就是最多只能有 个系统 按钮 AbstractBtnRgst 类中以常量的形式列出了所有的系统按钮 常量名常量说明备注 标题 第 27 20 页 SYSBTN QUERY 系统预制查询钮 SYSBTN SAVE 系统预制保存按钮 SYSBTN REFRESH 系统预制刷新按钮 SYSBTN PRINT 系统预制打印按钮 SYSBTN PRINTPREVIEW 系统预制打印预览按钮 SYSBTN ADD 系统预制增加按钮 SYSBTN DELETE 系统预制删除按钮 SYSBTN EDIT 系统预制编辑按钮 SYSBTN CANCEL 系统预置取消按钮 SYSBTN RETURN 系统预置返回按钮 SYSBTN ADD LINE 系统预置增行按钮 SYSBTN DEL LINE 系统预置删行按钮 SYSBTN SUBOPERATION 系统预制子集操作按钮 SYSBTN INSERT LINE 系统预制插入行按钮 SYSBTN BATCH ADD 系统预制批量增加按钮 SYSBTN BATCH EDIT 系统预制批量修改按钮 SYSBTN COMMIT 系统预制提交按钮 SYSBTN CALLBACK 系统预制收回按钮 SYSBTN EXAMINE 系统预制审批按钮 SYSBTN EXAMINE CHECK 系统预制审核按钮 SYSBTN CANCELEXAMINE 系统预制弃审按钮 SYSBTN EXAMINE SUGGESTION 系统预制审批意见按钮 SYSBTN BROWSE 系统预制浏览按钮 SYSBTN PATCH MANAGE 系统预制附件管理按钮 SYSBTN IMPORT 系统预制导入按钮 SYSBTN EXPORT 系统预制导出按钮 SYSBTN SEAL 系统预制封存按钮 SYSBTN CANCELSEAL 系统预制解封按钮 SYSBTN FREEZE 系统预制冻结按钮 SYSBTN CANCELFREEZE 系统预制解冻按钮 SYSBTN PUBLISH 系统预制发布按钮 SYSBTN CANCELPUBLISH 系统预制取消发布按钮 SYSBTN DETAILS 系统预制明细按钮 SYSBTN STAT 系统预制汇总按钮 SYSBTN EDIT LINE 系统预置编辑行按钮 对外提供一个静态方法校验是否为合法的按钮 public static boolean isContainBtnID int btnID 为了实现这个方法 需要在静态块中把注册按钮加入散列影射中 本部分略显繁琐 考虑使用统一的办法加入常量注册 public final ButtonVO createSysBtnVOByID int btnID public abstract ButtonVO createUserBtnVOByID int btnID 两个方法分别根据按钮的 创建系统按钮和用户自定义按钮的 ButtonVO CreateUserBtnVOByID 方法是需要在子类中重写的 createSysBtnVOByID 方法 是禁止子类覆盖的 标题 第 27 21 页 5 3 4 ButtonStateRegister 类说明类说明 ButtonStateRegister 类注册了每一个状态下 ButtonManager 中所有按钮的行为 包括可用性和可见性 注意按钮在一个状态下的默认行为是可见而不可用 描述一个状态下按钮的行为 我们统一使用一个 ButtonStateVO 来封装 ButtonStateVO 结构见下图 ValueObject B Bu ut tt to on nS St ta at te eV VO O mergeVO void enableBtnIDs int stateData Object stateID int invisiableBtnIDs int enableBtnIDs 属性指定此状态下可用的按钮 ID 数组 invisiableBtnIDs 属性指定 此状态下不可见的按钮 ID 数组 StateID 就是状态 ID stateData 是预留给用户的数据字 段 基本的实现机制是把上图中的状态 按照对应的状态 放在一个散列影射中 然后不同的对外提供根据状态 得到状态 的服务 对外的接口有 方法名称参数返回值描述 getButtonStateVOByStateID int stateID 状 态 ID 本状态 必须是状态注册 中已经注册的状 态 ButtonStateVO 根据 StateID 得到 ButtonStateVO 实例 addStateVO int stateID 状 态 ButtonStateVO sVO 按钮状态 VO 添加 StateVO 和 ID 的值对 如果 stateID 对应的 ButtonStateVO 不为 空 并且在没有屏蔽 系统默认设置的状态 那么将 stateID 对应 的 ButtonStateVO 取 出 然后将这个对 应的 ButtonStateVO 的 enableBtnIDs 及 invisiableBtnIDs 与 sVO 的 e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论