2010-11-12 68 views
0

我正在查看一些我写过的代码,并且在思考“我应该将该对象传递给该方法还是其某些属性?”。哲学对象/属性参数查询

让我解释一下:

这个对象有大约15属性 - 用户输入。然后我有大约10种方法使用多达5个这些输入。现在,如果每个方法都有1个参数 - “用户输入对象”,界面看起来更清晰。但是每种方法都不需要所有这些属性。我可以传递每个方法所需的属性。

事实上,我问这个问题表明我接受我可能会做错事。

讨论...... :)

编辑:要添加calrity:

从网页用户进入他们的房子和花园的详细信息。这种性质的门的数量,房间数量和其他属性(共15个)。

这些细节作为简单整数属性存储在“HouseDetails”对象中。

“HouseDetails”的一个实例被传入“HouseRequirementsCalculator”。这个类有10个私人方法,如“计算地毯面积”,“caclulateExtensionPotential”等。

对于我的查询的例子,我们使用“CalculateAreaOfCarpet”方法。

  • 我应该通过 “HouseDetails” 对象

  • ,或者我应该通过 “HouseDetails.MainRoomArea,HouseDetails.KitchenArea,HouseDetails.BathroomArea” 等基于我的回答上述

+0

可能的重复:http://stackoverflow.com/questions/3744806/best-way-to-pass-values-to-a-function-when-there-are-many-to-send/3744851#3744851 – rkg 2010-11-12 14:38:49

+0

我(可能我们)理解得很好。我认为你应该通过HouseDetails对象而不是单个参数。我在下面修改了我的答案。 – 2010-11-12 17:12:28

回答

0

并与您的相关编辑

a)您应通过“HouseDetails” 对象

其他的想法:

更多地考虑你的问题,特别是增加的细节我留下想知道你为什么会不只是包括那些计算方法为您HouseDetails的一部分目的。毕竟,它们只是针对该对象的计算。为什么要创建一个接口和另一个类来分别管理计算?

旧文:

每个方法应该和会知道的一部分传入的对象时,它需要引用,以获取其完成工作。您不必/不应该通过在界面中创建细粒度的重载来强制实施这些知识。传入的对象是您的模型和您的合同。

另外,想象一下,如果您从该对象中添加和删除属性,会影响多少代码。把事情简单化。

0

传递个别属性 - 在每种情况下都不相同 - 看起来很杂乱。我宁愿传递整个对象。

请注意,您对您的情况没有足够的了解。也许试图描述这个事情的实际用法?这个具有15个属性的对象是什么?是那些“使用多达5个这些输入的10个方法”在同一个对象上,还是其他的一个?

问题被编辑

后,我一定要与传递整个对象去了计算器类做必要的计算。

另一方面,您可能会发现域驱动设计一个有吸引力的替代(http://en.wikipedia.org/wiki/Domain-driven_design)。关于这些原则,您可以将计算器的方法添加到HouseDetails类。领域驱动设计是相当不错的写作风格,取决于这种方式对你的干净程度。

+0

为了清晰起见,我编辑了原始问题。 – 2010-11-12 14:54:04

+0

完成,编辑我的答案。 – 2010-11-13 17:50:30