3. 对象模型设计基础

在制造运营系统中,流程模型回答的是“事情按什么顺序发生”,而对象模型回答的是“事情作用在什么上、这些事物之间是什么关系”。如果只画流程不建对象模型,系统很容易退化成“表单驱动”:工单、物料、设备、人员都只是字段,一旦业务规则变化,就要在流程里到处打补丁。对象模型的价值,是把制造现场中稳定存在的业务实体及其关系先固化下来,让流程成为对象状态迁移的驱动者,而不是数据的搬运工。

对象、类、属性与标识

对象是制造运营中可被独立识别和管理的业务实体,例如一张具体的工单 WO-20240513-001、一台具体的设备 CNC-07、一批具体的物料 LOT-2405A。类是对具有相同特征和行为的对象的抽象,例如“工单类”“设备类”“物料批次类”。属性描述对象的状态与特征,如工单的计划数量、已完工数量、状态、计划开始时间;设备的能力等级、当前状态、所属产线。标识是区分同类对象的关键,制造场景中常用业务编码加版本或批次号,例如工单号、设备编号、物料批次号加序列号。

设计属性时要区分三类:一是标识属性,用于唯一识别;二是状态属性,用于驱动流程判断,如工单状态(已创建、已下达、生产中、已完工、已关闭);三是业务属性,用于记录业务事实,如实际数量、报废数量、实际开始时间。状态属性尤其重要,因为它直接决定流程模型中的分支条件。例如“工单是否可开工”不应写成流程里的硬编码判断,而应表达为“工单状态为已下达且物料齐套”这一对象约束。

关系、继承与聚合

对象之间不是孤立的。制造运营中最常见的关系包括:关联关系,如工单与物料之间存在“消耗”关联;聚合关系,如产线由多台设备组成,设备可以独立存在,产线是聚合根;组合关系,如工单与工单工序,工序不能脱离工单独立存在;继承关系,如“装配工单”和“返修工单”都继承自“工单”基类,共享工单号、状态、数量等通用属性,但各自扩展特殊属性。

继承用于表达“是一种”的语义,聚合用于表达“包含但可独立”的语义,组合用于表达“包含且同生命周期”的语义。三者混用是对象模型设计中最常见的错误。例如把“设备”作为“产线”的组合,会导致设备调拨后历史数据断裂;把“工单工序”作为聚合,会导致工单关闭后工序仍可独立存在,破坏业务一致性。

制造运营对象模型核心关系示意 工单(基类) 工单号 / 状态 / 计划数量 计划开始 / 计划结束 装配工单 BOM版本 / 装配节拍 返修工单 缺陷代码 / 返修原因 继承(是一种) 工单工序 工序号 / 工作中心 标准工时 / 状态 组合(同生命周期) 物料批次 批次号 / 物料编码 可用数量 / 质量状态 关联(消耗) 产线 产线编码 / 节拍 所属车间 设备 设备编号 / 能力等级 当前状态 / 所属产线 聚合(可独立) 工作中心 中心编码 / 产能 可用设备集合 关联(分配) 关联(归属) 继承 聚合 组合 关联 弱关联 / 分配

对象模型与流程模型的关系

对象模型与流程模型是“静态结构”与“动态行为”的配合关系。流程模型中的每个活动,本质上都是对某个对象执行操作或改变其状态。例如“下达工单”是把工单状态从“已创建”改为“已下达”;“报工”是增加工单的已完工数量并写入报工记录;“质检判定”是改变物料批次的质量状态。因此,对象模型中的状态机是流程分支的判断依据,流程模型中的活动是对象状态迁移的触发条件。

实践中建议先识别对象及其状态,再画流程。以工单为例,先定义状态集合:已创建、已下达、生产中、已完工、已关闭,并明确每个状态的进入条件和退出条件。然后流程模型只需表达“谁在什么条件下触发状态迁移”。这样当业务规则变化时,只需调整状态迁移条件,而不必重画整条流程。反过来,如果先画流程再补对象,往往会出现同一对象在不同流程中状态定义不一致的问题。

建模语言与工具选择

对象模型的主流表达方式是 UML 类图,它天然支持类、属性、操作、继承、聚合、组合和关联的表达。对于制造运营场景,类图适合表达对象结构,状态图适合表达单个对象的状态迁移,序列图适合表达跨对象的消息交互。三者配合使用,可以覆盖从静态结构到动态行为的完整描述。

工具选择上,轻量级团队可用 draw.io 或 PlantUML 快速表达类图与状态图,前者适合评审沟通,后者适合版本化管理。中大型项目若需要与代码或模型驱动开发衔接,可考虑 Enterprise Architect、MagicDraw 等支持 UML 全模型的工具。若采用领域驱动设计,则可用事件风暴加聚合根识别的方式先梳理对象边界,再落到类图。无论选哪种工具,关键判断标准是:能否清晰表达继承、聚合、组合和关联的语义差异,能否与流程模型共用同一套对象标识和状态定义。

对象模型评审时,重点检查三件事:每个对象是否有唯一标识;每个状态是否有明确的进入和退出条件;继承、聚合、组合是否使用正确。这三项决定了后续流程模型能否稳定演进。

一个可参考的对象模型片段

以下以工单为核心,给出一个简化的对象模型片段,用于说明属性与关系的组织方式。示例中的字段和取值均为教学假设,实际项目应按业务确认。

类:工单
  标识:工单号(唯一)
  属性:状态、计划数量、已完工数量、计划开始、计划结束
  状态集合:已创建 → 已下达 → 生产中 → 已完工 → 已关闭
  关系:
    组合 1..* 工单工序
    关联 0..* 物料批次(消耗)
    关联 0..1 产线(执行)

类:工单工序
  标识:工单号 + 工序号
  属性:工作中心、标准工时、实际工时、状态
  关系:关联 0..1 设备(占用)

类:物料批次
  标识:批次号
  属性:物料编码、可用数量、质量状态
  关系:关联 0..* 工单(被消耗)

类:产线
  标识:产线编码
  属性:节拍、所属车间
  关系:聚合 1..* 设备

类:设备
  标识:设备编号
  属性:能力等级、当前状态、所属产线
  关系:关联 0..* 工作中心(可被分配)

这个片段中,工单与工单工序是组合关系,工序随工单关闭而结束;产线与设备是聚合关系,设备可调拨且保留历史;工单与物料批次是关联关系,一张工单可消耗多个批次,一个批次也可被多张工单消耗。把这些关系定清楚,流程模型中的“领料”“报工”“质检”等活动才有稳定的数据基础。