2011-08-04 99 views
1

我有一個設計零售商系統的場景。這不是一個真正的實時應用,而只是一個場景來檢查我的OO設計技能是否正確以及我是否正確思考。我仍然在這裏學習。我正在做這個在C#中。我的OOP設計是否正確?

的情況是這樣的:

零售商銷售產品的固定希望設計一個系統,然後從他的各種固定數量的供應商最優惠的價格,並從該供應商的訂單。爲了簡單起見,我將固定式產品切割成同一家公司的一種產品,即XYZ鋼筆。每個供應商在詢問時會提供XYZ鋼筆的報價,零售商系統會從各賣家中選擇最佳價格並下達該賣家的訂單。

方法1:

  1. 創建供應商一個抽象類,每個供應商的實現。
  2. 每個供應商的實現都有一個PlaceOrder()方法和一個成本屬性。
  3. DataLayer設置每個供應商實施的成本屬性。
  4. 創建評估最優惠的價格每個實現,並將在適當的執行順序的CheckBestRetailer類。

方法2:

  1. 創建類型供應商的成本與性能和PlaceOrder()方法的列表。
  2. 對每個供應商的數據層增加了新的供應商類型列出並設置費用明細它從數據庫中獲得。
  3. CheckBestRetailer類環路直通該名單,並評估最優惠的價格每個對象,並將在適當的執行順序。

在上述兩個方面中,我覺得方法1更接近OOP,但前提是我擁有​​固定數量的供應商。如果供應商的數量可以根據從數據庫中檢索到的數據而改變,那麼方法2會更好。

您認爲如何?

我可能沒有最好的情況在這裏測試我的OOAD。我很想擁有一些我可以使用的示例場景......如果可能,請提供設計提示。

謝謝你的時間。

回答

3

選項1將是更合適的,在這種情況下,它似乎與選項2會是一個更好的選擇,因爲它的簡單。

我最常做的時候,我不知道如何解決事情是:

  • 列表我的要求:獲得最佳價格給供應商設置的項目。
  • 創建候選對象的列表:供應商,產品,零售商等
  • 抽獎或與我想我意義
  • 當我失去了我開始編碼的主要類的需求關係佈局類,在這種情況下,它將是零售商和GetBestRetailer()方法。

對於上述任何情況,如果您不對或不對,這是一種頭腦風暴,更好地理解您必須達到的目標以及您找到的選擇。

你遇到的東西每當這似乎是困難的,我抽象它通過創建一個返回你所需要的答案的方法或通過創建一個新的類,如果這似乎做出更好的感覺。 作爲一個練習,我試着認爲,「看病難/複雜」的部分將用他人和委託給一個方法或類我單獨進行編碼,從問題的一部分,我現在重點。

心連心

3

我想說方法2時更好。 沒有必要爲每個供應商創建一個獨特的類,因爲供應商的行爲幾乎相同。如果你有不同的行爲,每個供應商

+0

該死的,你打我吧:) –

+0

如果我介紹新的複雜像一些供應商提供折扣和別人不一樣。那哪個更好? – user20358

+1

你可以使用裝飾更多的行爲添加到特定的類,有很多的選擇..這真的取決於你現在需要解決的,如果折扣是可以適用於所有供應商的東西,那麼你仍然會是個不錯什麼問題選項2和一個單一的..如果..不嘗試複雜化你的設計思維未來的要求,直到你知道他們將要發生 –