c# - 代码样式 : shop. AddProduct(产品) 或 shop.Products.Add(产品)?

标签 c# architecture coding-style

这个问题我已经问自己很长时间了,所以我决定在这里问你们。

假设我有一个 Shop 对象,其中包含一个 ProductList 对象作为实例变量。我的 Shop 对象的核心功能当然是添加产品的能力。

向商店添加产品的公共(public)界面应该是什么样子?

shop.AddProduct(产品)

shop.Products.Add(产品) ?

感谢您的想法和帮助。

最佳答案

这实际上是一个关于是否将 Products 公开为属性,或者是否使用方法的问题。关于这一点,SO 上已经有很多问题了。例如:

Properties vs Methods

在大多数情况下,当属性不是容器对象的功能部分时,我个人更喜欢它们。我的意思是,产品并不是商店不可或缺的一部分。商店仍然是商店,即使它没有产品。

产品只是商店内的元素。因此,它们作为收藏品非常有意义。尽管我可能有一个 Inventory 属性,其中 Products 是库存的属性。

无论如何,方法在做某事时往往更有意义。不仅仅是包含某些东西。例如,store.PurchaseProduct(product) 会从产品集合中删除商品,但它也会执行某些操作(向收银台添加资金、进行库存管理等)。

使用方法的另一个原因是当您操作集合时需要执行多项操作时。例如,假设您不希望在不确保钱进入收银台或记录破损情况的情况下从产品中移除元素。然后,我仍然会使用一个属性,但我会将该属性设为私有(private),并且仅通过执行操作的方法访问它。

然而,这在很大程度上是一个哲学论证。无论哪种方式,人们都会有意见。重要的是你自己的看法。

关于c# - 代码样式 : shop. AddProduct(产品) 或 shop.Products.Add(产品)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15626725/

相关文章:

java - Java 中的过早优化 : when to use "x = foo.getX()" vs simply "foo.getX()"

c# - 如何将两个不同类型的列表合并为一个包含两种类型的新类型列表?

c# - 如何使用 C# 将 mysql 中的表名列出到组合框中?

c# - 检查 richtextbox 上的选定文本是否全部为粗体或混合 [C#]

c# - 如何使用 Visual Studio 2013 创建 Uml 图

c - 如何处理条件初始化,这是一种好的做法吗?

c# - 以松散耦合的方式公开 ILogger

api - Web 应用程序架构 : 1 or n API

asp.net-mvc - Azure Web应用程序和Web api服务(移动服务)架构全局分布

coding-style - 我应该命名 "makefile"还是 "Makefile"?