2012-03-30 84 views
0

对不起,如果这是重复的。如何模拟此项目结构?

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

我的计划最初将项目新增到购物车之前,检查它是否是一个股票项目,如果这样做的必要库存检查。否则,只需将该物品添加到购物车。

甲同事提出了不同的方法,这将不需要测试项目的类型;相反,基类方法会有“hasEnoughStock()”方法。库存物品将会重写方法来进行真正的库存检查,非库存物品只会返回一些真实值(即它们总是有足够的库存)。我认为我的同事有更好的方法;然而对我来说,有一种有趣的功能可以检查库存中是否有实际没有任何实际库存的物品。

我想什么要问的是这是从一个角度OO点正确的做法(也许有不同的方法)。

我们打算在C#中这样做,如果这有什么不同。

在此先感谢

+0

感谢你们两个......只是其中一个名字让我陷入错误轨道的事情。 – Marcin 2012-04-02 00:57:21

回答

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; 
    } 
} 
0

你的同事的做法似乎是合理的 - 如果它可以帮助你能想到的非股票项目(比如电子书为例)作为虚拟股票。它只是语义,但你可以调用你的财产/方法你喜欢什么,它不必是“hasEnoughStock” - 它可以是“IsAvaialble”或“ValidItem”。无论看起来对你来说最合乎逻辑

1

这是我的承担。

假设你有一个WashingMachine类。洗衣机的目的是洗衣服。洗衣机不是税的计算税,检查是否缺货或有库存。

计算税是开票的义务,并检查它是否脱销的是别的东西的责任。

以同样的方式,我想是不是该项目的责任,以决定它是否是项目的inStock进出stockItem的。它应该被授权给其他在这种情况下它可能是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. 

} 

希望这会有所帮助。

+0

有趣。你能否以某种方式阐述如何在代码方面起作用,因为我看不到它。 – Marcin 2012-04-03 03:54:44