2013-03-25 42 views
2

這是一個我一直問自己很長時間的問題,所以我決定在這裏問問你們。代碼風格:shop.AddProduct(product)or shop.Products.Add(product)?

我們假設我有一個Shop對象,其中包含一個ProductList對象作爲實例變量。我的Shop的核心功能 - 對象當然是能夠添加Product

添加產品到商店的公共界面應該是什麼樣子?

shop.AddProduct(product)

shop.Products.Add(product)

謝謝你的想法和你的幫助。

+0

我會和第一個一起去,認爲它更容易理解。不是說他們特別辛苦,但是第一個很好地滾動 – 2013-03-25 23:30:27

+0

我同意,加上你不需要訪問一個成員 – gordonk 2013-03-25 23:34:22

+0

我個人更喜歡第二個。將新產品添加到產品列表的功能是產品列表的一項功能,而不是商店。 – 2013-03-25 23:34:36

回答

3

這實際上是一個關於是否將產品作爲屬性公開或者是否使用方法的問題。關於這一點,SO上已經有很多問題。例如:

Properties vs Methods

我個人更喜歡在大多數情況下性能的時候都沒有容器對象的功能部分。由此,我的意思是產品不是商店的組成部分。即使沒有產品,商店仍然是商店。

產品只是存儲在商店內的物體。因此,它們作爲收藏品非常有意義。雖然我可能會有一個庫存屬性,其中產品是庫存的一個屬性。

無論如何,當他們做某事的時候,方法往往更有意義。不只是包含一些東西。例如store.PurchaseProduct(product)會從產品集合中移除項目,但它也會做一些事情(增加收入,庫存管理等)。

使用方法的另一個原因是當您操作集合時需要做幾件事。例如,假設您不希望在沒有確保貨幣進入到貨幣的情況下從產品中移除物品,或者記錄了破損。然後,我仍然會使用一個屬性,但我會將該屬性設置爲私有的,並且只能通過執行操作的方法訪問它。

然而,這在很大程度上是一個哲學論證。人們會有任何意見。重要的是你自己的意見。

+0

謝謝你的答案。這將很難決定。你對混合兩者感覺如何? 'shop.addProduct(product)'看起來非常乾淨。但是,我可能希望將ProductList作爲數組獲取,或者從數組中添加產品。如果我直接去'shop.Products.ToArray()'或'shop.Products.Add(Product [] productArray)'',我可以避免大量的重複實現。 – Macks 2013-03-26 01:06:10

相關問題