如何对此项结构进行建模

本文关键字:建模 结构 | 更新日期: 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"。你觉得最合乎逻辑的。