仓库中的每个存储单元、传输设施以及物品都与特定属性相关。这些属性被称为存储组织标准(Storage Organization Criteria , SOC)。这个标准定义了特定存储单元中,可以存储哪些类型的物品,或者特定传输设施可以传送哪些类型的物品。存储组织标准的例子还包括:吞吐量类、有害类以及温度类。
对每一个标准都有特定的、可枚举的允许值,如对吞吐量类来说有快速、中等和低速几种。
仓库管理流程控制系统中的领域功能使用这些信息来决定三个问题:
- 要存放物品的目标位置是什么?
- 从当前位置到目标位置的中间步骤有哪些?
- 每一步骤用来传输物品的传输设施是什么?
例如,只存储一小段时间就快速取出的物品属于吞吐量类的快速类,这时应当将物品只存放在快速类的存储单元中。类似地,具有某种有害性质(如易燃性的物品),则应当由适合传输易燃 物的传输设施来传送。
某一特定存储单元、传输设施以及物品的存储组织标准通常很少随时间变化,除非是对仓库进行现代化改造。在正常的仓库运行中它们通常都是固定不变的,一旦确定了特定存储单元、传输设施或物品,则存储组织标准就只能由相应的管理功能来显式地调整。
如何减少无谓的资源消耗?
在仓库管理流程控制系统的具体安装中,维护这些数最庞大的存储组织标准就产生了一个问题。将每一个存储单元、传输设施和带有私有的相关存储组织标准集合的物品联系起来需要大量的内存,比如,有的仓库可能会有超过一百万个箱子。此外,因为许多仓库拓扑元件共享相同的存储组织标准,这会“浪费”很多内存。但是,为了确保仓库操作正确,又必须使得它们中的每一个都与一个良好定义的存储组织标准集合联系起来。
问题:怎样才能为仓库中的每个存储单元、传输设施以及物品提供相应的存储组织标准列表,而避免消耗巨大的内存呢?
对策:可以将存储组织标准采用恒值(Immutable Value)解决方案来实现,从而在仓库拓扑的多个元件之间共享。
解决方案:在多线程环境中共享和状态改变的问题会成倍的增加。因此,定义一个值对象,使其实例是不可改变的。值对象的内部状态是在创建时设定的,并且不允许后续改变,如下图示。
没有任何状态改变意味着不需要同步。这本身就决定了 Immutable Value 是线程安全的,而且因为没有加锁机制,也意味着它在多线程环境中的使用是高效的。
在仓库拓扑中 SOC 设计
在具体的仓库拓扑存储组织标准(Storage Organization Criteria ,SOC)设计中, 每个存储单元、传输设施和物品都维护着一份不变的存储组织标准集,这是在具体的仓库配置时指定的。在这个设计中这个集合由组合结构的根类(Storage 类)维护,如下图所示。
一个 Immutable Value 可以由不同的存储单元、传输设施以及物品共享,甚至多个控制线程也可以共享同一个 Immutable Value。此外, 仓库管理流程控制系统中的领域功能不允许修改Immutable Value,而只能通过相应的管理功能来显式改变。