DirectSurface UIDirectSurface UI
开始使用
文档/企业架构

复杂业务架构

复杂业务系统通常不是“一个页面加几个组件”,而是由工作台、页面生命周期、权限、上下文、数据服务、审计、诊断和高性能组件共同组成。DirectSurface UI 的职责是提供这些能力的承载结构,不定义医院、患者、订单、病历等业务模型。

分层建议

推荐把系统拆成四层:

业务入口
  工作台、路由、菜单、登录态、全局服务

业务页面
  查询页、维护页、编辑页、弹窗、浮动窗口

框架能力
  RenderObject、布局、组件、上下文、命令、权限、诊断、弹层

业务服务
  API 客户端、缓存、权限服务、审计服务、字典服务、模板服务

业务入口负责把全局上下文和基础服务注入应用。业务页面只组合组件和服务,不直接改框架内部状态。框架能力只提供通用机制,不知道具体业务状态。业务服务封装接口协议、权限规则和持久化行为。

页面边界

复杂系统中最容易失控的是“页面之间互相拿对象”。推荐用页面作为生命周期边界:

  • 页面打开时创建局部上下文和页面级命令。
  • 页面关闭时释放上下文、命令、订阅、缓存和弹层。
  • 弹窗优先继承调用页面上下文,而不是直接依赖全局变量。
  • 浮动窗口如果升级为顶级窗口,应明确重新注入所需上下文。

这样可以避免关闭 tab 后对象仍被全局引用,也能让同一个业务页面在多个患者、多个院区或多个租户下同时打开。

框架不做什么

框架不应该内置 CIS、HIS、EMR 的具体业务对象。比如当前患者、就诊号、医嘱状态、病历归档状态都应该由业务定义,然后通过上下文或页面状态注入。

框架可以提供:

  • 上下文注册和查找。
  • 命令注册、权限判断和启用状态。
  • 可销毁的页面范围。
  • 高性能表格、树、大文本和病历编辑器。
  • 运行时诊断和对象查看。

框架不直接提供:

  • 业务权限编码规则。
  • 患者主索引结构。
  • 医疗文书生命周期。
  • 审签、归档、质控的业务流转。

这些内容属于业务系统,应该在业务服务和页面组合层完成。

推荐接入流程

  1. 先定义应用级上下文:登录用户、租户、权限服务、字典服务、通知服务。
  2. 再定义页面级上下文:当前业务对象、页面参数、页面缓存、页面命令。
  3. 所有按钮、菜单、快捷键走统一命令。
  4. 所有业务状态改变走页面状态和服务,不让组件互相直接调用。
  5. 所有长生命周期对象都放入可释放范围。
  6. 性能问题优先用运行时诊断定位,再判断是布局、绘制、数据量还是业务回调。

复杂系统的稳定性来自边界清晰。组件越通用,业务就越应该通过上下文、命令和服务把规则放在外层。