我正在处理产品物料清单(物料清单),我被困了。这是我的班级图:
每个组件都有单位成本,因此ComponentItem具有总成本。由ComponentItems组成的组件也有总成本(ComponentItems成本之和)。
此结构允许我创建任何产品/组件层次结构。 我正在验证产品和组件的插入/更新中的循环。
我想在数据库中更新每个成本,我不想每次使用产品/组件时使用对象计算成本。我的意思是,如果我更新组件ABC的单位成本,他的父组件成本应该更新,等等 - >更新将在层次结构中传播。
实施此方法的最佳方法是什么?我在想树的表现。更新组件时,我会检索所有相关组件/产品并构建树。然后我必须更新组件的第一级父母,并对这些父母的父母做同样的事情。
答案 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。