2012-03-30 3 views
0

申し訳ありませんが重複している場合。このアイテムの構造をモデル化するにはどうすればいいですか?

私がモデルにしたいのは、アイテムを追加して(おそらく後で注文を作成する)ショッピングカートです。主に異なる2つのアイテムタイプがあります。在庫を持つ在庫タイプ、および在庫を持たない汎用タイプ。ストックアイテムは十分な在庫があれば追加することができます。それ以外の場合は追加されません。両方の種類の項目の間で共有プロパティを持つ基本クラスがあります。

私の計画は、最初に商品をショッピングカートに追加する前に計画されていました。在庫アイテムであるかどうかをチェックし、必要な場合は在庫チェックを行います。それ以外の場合は、カートにアイテムを追加するだけです。

共同作業者は、項目のタイプをテストする必要のない別のアプローチを提案しました。代わりに、基本クラスのメソッドは、「hasEnoughStock()」メソッドを持っているでしょう。在庫品目は、実際の在庫チェックを行うためにメソッドをオーバーライドし、非在庫品目は単に真の価値を返すだけです(つまり、在庫が十分です)。私の同僚はより良いアプローチをしていると思います。しかし私には実際には実際の在庫がない商品の在庫をチェックする機能を持っているのはちょっと面白いと感じます。

私はOOの観点から正しいアプローチがあるか(あるいは、おそらく異なるアプローチがあるか)質問したいと思います。

違いがあれば、C#でこれを行う予定です。事前

+0

おかげで...名前が間違ったトラックを私を設定するそれらのもののひとつ。 – Marcin

答えて

1

私はまた、基本クラスの共通の機能を持つアプローチが正しいと思います。 あなたが機能についてcanAddToCart()何と呼ばれる? `

非在庫品目のクラスだけでtrueを返すか、他のいくつかのチェックを行います、在庫品目クラスは、このようhasEnoughStock()というプライベート関数を呼び出します名前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クラスがあるとします。 WashingMachineオブジェクトの義務は、衣服を洗うことです。税を計算し、在庫がないか、在庫があるかどうかを確認することは、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

関連する問題