产品BOM(物料清单):成本更新.我一定要用树形结构吗?
本文关键字:结构 更新 BOM 产品 | 更新日期: 2023-09-27 18:03:34
我正在制作产品BOM(材料清单),我被卡住了。这是我的类图:
- 组件有组件项。ComponentItem有一个Component和一个quantity。示例:组件ABC有3个组件C1和2个组件C2。
- 产品有组件项和产品项(类似于组件项,但适用于产品)。
每个组件都有一个单位成本,因此ComponentItem有一个总成本。由ComponentItems组成的组件也有总成本(ComponentItems成本的总和)。
这个结构允许我创建任何产品/组件层次结构。我正在验证产品和组件的插入/更新循环。
我想在数据库中更新每个成本,我不想每次使用产品/组件时都使用对象来计算成本。我的意思是,如果我更新组件ABC的单位成本,他的父组件成本应该被更新,等等——>更新在层次结构中传播。
实现这个的最好方法是什么?我想用树形表示。当组件更新时,我检索所有相关的组件/产品并构建树。然后我必须更新组件的第一级父级,并对这个父级的父级做同样的事情。
我认为一个简单的树状结构是最好的。
。就像
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可能是解决这个问题的好方法。