如何对此项结构进行建模
本文关键字:建模 结构 | 更新日期: 2023-09-27 18:29:34
如果这是重复的,很抱歉。
我想要建模的是一个购物车,它会向其中添加商品(大概稍后会创建订单)。主要有两种不同的项目类型。有库存的库存类型和没有库存的通用类型。只有在库存充足的情况下才能添加库存项目,否则不会添加。会有一个基类在这两种项之间具有共享属性。
我最初的计划是在将商品添加到购物车之前,检查它是否是库存商品,如果是,请进行必要的库存检查。否则,只需将商品添加到购物车中即可。
一位同事提出了一种不同的方法,不需要测试物品的类型;相反,基类方法将具有"hasEnoughStock()"方法。库存项目将覆盖进行实际库存检查的方法,非库存项目只会返回一些真实值(即它们总是有足够的库存)。我认为我的同事有更好的方法;然而,对我来说,有一个功能来检查库存,而实际上没有任何真正的库存,这感觉有点有趣。
我想问的是,从OO的角度来看,哪种方法是正确的(或者可能有不同的方法)。
如果有什么不同的话,我们计划在C#中这样做。
提前感谢
我还认为,在基类中使用公共函数的方法是正确的。如果您对名称hasEnoughStock()
有疑问,那么一个名为canAddToCart()
的函数呢
非库存项类只会返回true或进行一些其他检查,库存项类会调用一个名为hasEnoughStock()
的私有函数,如下所示:
public class NonStockItem : Item {
public override bool canAddToCart () {
return true;
}
}
public class StockItem : Item {
public override bool canAddToCart () {
return haveEnoughStock();
}
private bool haveEnoughStock () {
return ... doStockCheckHere;
}
}
这是我的看法。
假设你有一个班的洗衣机。洗衣机对象的职责是洗衣服。洗衣机没有义务计算税款,检查它是否缺货或有存货。
计算税款是账单的责任,检查它是否缺货是其他东西的责任。
同样,我认为这不是物品的责任,决定它是库存物品还是缺货物品。它应该被委托给其他在这种情况下,它可能是Warehouse
类或决定是否添加类型的东西。
Class Item
{
}
//Lack of creativity, I just named it as Manager. You can come up with more appropriate name,
Class Manager
{
//Determine weather the item is with stock or without stock.
}
Class Shoppingcart
{
//Instantiate Manager.
//Invoke the method which determines stock or out of stock.
}
希望这能有所帮助。
你的同事的方法似乎是合理的——如果有帮助的话,你可以把非库存物品(比如电子书)想象成虚拟库存。这只是语义,但你可以随心所欲地调用你的属性/方法,它不必是"hasEnoughStock"——它可以是"IsAvaialble"或"ValidItem"。你觉得最合乎逻辑的。