编制可包含6个项目的库存可能看起来像这样:
class Inventory {
private:
Item[6] m_items;
};
现在另一方面,项目看起来像这样:
class Item {
private:
Inventory* m_parent;
};
然而,显然两个班级都不能相互认识。
一个解决方案是一个共同的基类,但这两个类没有任何共同之处,它会导致更多问题,例如:我无法从m_parent->addItem(this);
调用Item
的构造函数。
答案 0 :(得分:5)
项目在逻辑上是完整的。项目在一个根本没有库存概念的系统中值得建模。商品甚至可能不在库存中。它理论上甚至可能存在于多个库存中,具体取决于您正在建模的物品和库存类型。
另一方面,库存仅用于包含物品。它目前可能没有任何项目,但这本身就是库存的核心属性。
上述考虑使我得出结论,清单应该知道项目的概念以及它所拥有的特定项目。虽然项目应该被完全忽略,不仅仅是它们所处的库存,而是库存的概念。
答案 1 :(得分:0)
我同意Ben的回答,但我想扩展一下,当库存需要知道项目的变化时,或者如果项目需要库存中的一些额外信息,这应该由回调来处理。回调可以通过多种方式实现(函数指针,接口,std :: function,signal / slot,...),但主要的是:该项目不知道库存。
示例:
class CallbackInterface {
public:
virtual void itemChanged() = 0;
};
class Item {
public:
Item(CallbackInterface* callback): m_callback(callback) { }
private:
CallbackInterface* m_callback;
};
class Inventory: public CallbackInterface {
private:
Item[6] m_items;
virtual void itemChanged() {
std::cout << "item has changed";
}
};