代码风格:shop.AddProduct(product)or shop.Products.Add(product)?

问题描述:

这是一个我一直问自己很长时间的问题,所以我决定在这里问问你们。代码风格: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

这实际上是一个关于是否将产品作为属性公开或者是否使用方法的问题。关于这一点,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