产品BOM(物料清单):成本更新......我是否必须使用树状结构?

时间:2011-07-25 20:31:29

标签: c# hierarchy

我正在处理产品物料清单(物料清单),我被困了。这是我的班级图:

  • 组件具有ComponentItems。 ComponentItem具有组件和数量。示例:组件ABC具有3个组件C1和2个组件C2。
  • 产品具有ComponentItems和ProductItems(类似于ComponentItems,但适用于产品)。

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

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

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

实施此方法的最佳方法是什么?我在想树的表现。更新组件时,我会检索所有相关组件/产品并构建树。然后我必须更新组件的第一级父母,并对这些父母的父母做同样的事情。

2 个答案:

答案 0 :(得分:0)

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

E.g。像

这样的东西
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; 
       }


}

答案 1 :(得分:0)

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

Head First Design Patterns提供了一个很好的章节here,讨论在类似的背景下使用Decorator。