4. 系统总体架构设计

医生工作站系统不是单一应用,而是由门诊医生站、住院医生站、电子病历、医嘱、检验检查申请、护理协同、临床决策支持等多个业务域共同构成的临床工作平台。总体架构设计要回答四个问题:系统按什么层次组织、服务按什么粒度拆分、前端与后端如何解耦、各业务域之间通过什么通道集成。这四个问题相互制约,任何一项选错都会在后期以性能、交付或运维代价的形式暴露出来。

一、分层架构:把变化隔离在可控范围内

推荐采用五层结构,自上而下为接入层、网关层、应用服务层、领域能力层、数据与集成层。接入层承载医生工作站桌面客户端、浏览器端、移动查房端;网关层统一处理认证、路由、限流与审计;应用服务层按业务域组织服务,如医嘱服务、病历服务、患者主索引服务;领域能力层沉淀可复用的临床能力,如术语映射、剂量校验、权限判定;数据与集成层负责业务库、临床数据中心以及对外部系统的适配。

分层的核心价值是约束依赖方向:上层可调用下层,下层不得反向依赖上层。例如医嘱服务需要调用剂量校验能力,应通过领域能力层暴露的接口,而不是直接读取病历服务的数据库表。这条约束在项目初期看似繁琐,但能避免后期出现“改一处、崩一片”的连锁故障。

二、微服务与单体架构选型:按业务域和团队规模决策

选型不应追求技术先进性,而应匹配业务复杂度与团队交付能力。医生工作站系统常见的三种策略如下:

策略适用场景优势主要风险
单体架构业务域少于5个、团队少于15人、上线周期紧部署简单、事务一致、调试直观模块耦合、扩容粒度粗
模块化单体业务域清晰但暂不拆分、团队10~30人保留单体部署,模块边界可演进需严格约束跨模块调用
微服务多院区、多业务域、团队按域划分独立部署、按域扩容、故障隔离分布式事务、链路追踪、运维成本

对多数医院自建或区域统建项目,建议采用“模块化单体起步、按域渐进拆分”的路线。例如先以单体交付门诊医生站,但代码中按医嘱、病历、患者三个模块划分包结构并禁止跨模块直接访问数据表;当住院医生站、护理站接入后,再把医嘱模块独立为服务。这样既避免了一次性微服务化带来的分布式复杂度,又保留了演进空间。

三、前后端分离:接口契约先行

前后端分离的关键不是“前端用框架、后端出JSON”,而是接口契约先行。医生工作站前端需要展示患者基本信息、诊断列表、医嘱列表、检验检查结果等,后端应提供稳定的资源接口,而不是为每个页面定制接口。建议按资源组织URL,例如:

GET  /api/v1/patients/{patientId}            获取患者主索引
GET  /api/v1/patients/{patientId}/orders     查询患者医嘱列表
POST /api/v1/orders                          提交新医嘱
GET  /api/v1/orders/{orderId}/audit-trail    查询医嘱操作留痕

接口需明确分页、排序、错误码和字段脱敏规则。例如医嘱列表默认按开立时间倒序,每页20条;患者身份证号在非授权角色下返回掩码。前端通过统一请求层处理令牌刷新与错误提示,避免每个页面重复实现。

四、接口网关与系统集成策略

网关是医生工作站与外部系统之间的唯一入口,承担路由、鉴权、限流、协议转换和日志审计。典型集成对象包括HIS、LIS、PACS、医保结算、区域健康档案平台。集成策略按实时性分为三类:实时同步用于患者主索引、医嘱状态回写;准实时消息用于检验检查报告到达通知;批量抽取用于运营统计与科研数据。网关需为每类外部系统配置独立的超时与熔断阈值,例如LIS查询超时设为3秒、失败后降级为“报告未回”提示,而不是阻塞医生开立医嘱。

医生工作站系统总体架构与集成关系 接入层 门诊医生站 住院医生站 移动查房端 浏览器端 网关层 统一认证 路由分发 限流熔断 协议转换 审计日志 应用服务层(按业务域拆分) 患者主索引 Patient Service 医嘱服务 Order Service 病历服务 EMR Service 检验检查 CPOE Service CDSS 决策支持 领域能力层 术语映射 剂量校验 权限判定 规则引擎 数据与集成层 业务数据库 临床数据中心 消息队列 集成适配器 缓存/检索 HIS LIS PACS 医保结算 区域健康档案 依赖方向自上而下 集成方向双向适配

图中纵向箭头表示依赖方向,上层调用下层;底部橙色箭头表示与外部系统的集成通道,由集成适配器统一封装协议差异。网关层位于接入层与应用服务层之间,所有外部请求必须经过网关,不允许前端直接访问应用服务。

五、落地时的关键判断

架构设计完成后,需要用可验证的方式确认它是否成立。第一,检查是否存在跨层调用:如果医嘱服务直接查询了病历服务的表,说明分层约束失效。第二,检查网关是否覆盖全部入口:如果移动查房端绕过网关直连服务,认证与审计将出现缺口。第三,检查接口契约是否稳定:如果前端每新增一个页面就要求后端新增一个专用接口,说明资源抽象不足。第四,检查集成超时是否可控:如果LIS查询超时未设置,一次外部系统抖动就可能拖垮医嘱开立主流程。

建议在项目启动阶段就确定“模块化单体起步、按域渐进拆分”的路线,并把网关作为唯一入口写入开发规范。架构约束一旦在编码阶段被绕过,后期修复成本远高于初期约束成本。

总体架构不是一次性设计完成的静态图纸,而是随业务域接入、团队规模变化和外部系统演进而持续调整的约束框架。对医生工作站系统而言,最重要的不是选择了微服务还是单体,而是分层边界是否清晰、接口契约是否稳定、集成通道是否可控。这三点决定了系统在门诊高峰、多院区协同和外部系统故障时能否保持可用。