产品BOM(物料清单):成本更新.我一定要用树形结构吗?

本文关键字:结构 更新 BOM 产品 | 更新日期: 2023-09-27 18:03:34

我正在制作产品BOM(材料清单),我被卡住了。这是我的类图:

  • 组件有组件项。ComponentItem有一个Component和一个quantity。示例:组件ABC有3个组件C1和2个组件C2。
  • 产品有组件项和产品项(类似于组件项,但适用于产品)。

每个组件都有一个单位成本,因此ComponentItem有一个总成本。由ComponentItems组成的组件也有总成本(ComponentItems成本的总和)。

这个结构允许我创建任何产品/组件层次结构。我正在验证产品和组件的插入/更新循环。

我想在数据库中更新每个成本,我不想每次使用产品/组件时都使用对象来计算成本。我的意思是,如果我更新组件ABC的单位成本,他的父组件成本应该被更新,等等——>更新在层次结构中传播。

实现这个的最好方法是什么?我想用树形表示。当组件更新时,我检索所有相关的组件/产品并构建树。然后我必须更新组件的第一级父级,并对这个父级的父级做同样的事情。

产品BOM(物料清单):成本更新.我一定要用树形结构吗?

我认为一个简单的树状结构是最好的。

。就像

class Component {
    List<Component> children;
    Component parent;
    decimal _unitCost;
    public void addComponent(Component c) { children.add(c); UnitCost += c.UnitCost; } 
    public decimal UnitCost { 
       get {return unitCost;} 
       set { 
         if (parent != null) { 
            //update the parent cost, which will in turn update its parent etc.
            parent._unitCost -= UnitCost; parent.UnitCost += value; 
         }
         unitCost = value; 
       }

}

Decorator Pattern可能是解决这个问题的好方法。