2012-03-30 31 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