如何建模这个项目结构?

时间:2012-03-30 04:47:32

标签: c# asp.net oop shopping-cart

很抱歉,如果这是重复的话。

我想要建模的是一个向其添加物品的购物车(可能后来创建了一个订单)。有两种主要的不同项目类型。有库存的库存类型和没有库存的通用类型。只有有足够的库存才能添加库存商品,否则不会添加库存商品。会有一个基类在两种项目之间具有共享属性。

我的计划最初是在将商品添加到购物车之前,检查是否为库存商品,如果是,则进行必要的库存检查。否则只需将项目添加到购物车。

一位同事提出了一种不同的方法,不需要测试项目的类型;相反,基类方法将具有“hasEnoughStock()”方法。库存物品将被覆盖以进行实际库存检查,非库存物品将简单地返回一些真实值(即,它们总是具有足够的库存)。我认为我的同事有更好的方法;但对我来说,有一个功能来检查一个物品的功能,实际上没有任何真正的库存,这感觉有点滑稽。

我想问的是从OO的角度来看哪个是正确的方法(或者可能有不同的方法)。

我们计划在C#中执行此操作,如果这有任何区别。

提前致谢

3 个答案:

答案 0 :(得分:1)

我也认为,在基类中使用通用函数的方法是正确的。 如果您对名称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;
    }
}

答案 1 :(得分:1)

这是我的看法。

假设你有一个类WashingMachine。 WashingMachine对象的职责是洗衣服。 WashingMachine的责任不是计算税收,检查是否缺货或库存。

计算税是计费的责任,并检查缺货是否是其他责任。

以同样的方式,我认为这不是物品的责任,决定它是instock项目还是缺货项目。它应该委托给其他,在这种情况下它可能是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.

 }

希望这有帮助。

答案 2 :(得分:0)

您的同事的方法似乎是合理的 - 如果它可以帮助您将非库存项目(例如电子书)视为虚拟库存。它只是语义,但你可以调用你喜欢的属性/方法,它不必是“hasEnoughStock” - 它可能是“IsAvaialble”或“ValidItem”。对你来说最合乎逻辑的东西。