Coding style 哲学对象/属性参数查询

Coding style 哲学对象/属性参数查询,coding-style,Coding Style,我正在看我写的一些代码,并思考“我应该将该对象传递到该方法中,还是仅仅传递它的一些属性?” 让我解释一下: 这个对象大约有15个属性-用户输入。然后我有大约10种方法,最多使用5种输入。现在,如果每个方法都有一个参数“用户输入对象”,那么界面看起来就干净多了。但每个方法并不需要所有这些属性。我可以传递每个方法所需的属性 我问这个问题的事实表明我承认我可能做错了事情 讨论……) 编辑:要添加计算,请执行以下操作: 用户可以在网页上输入有关其房屋和花园的详细信息。门的数量、房间数量和其他此类性质的财

我正在看我写的一些代码,并思考“我应该将该对象传递到该方法中,还是仅仅传递它的一些属性?”

让我解释一下:

这个对象大约有15个属性-用户输入。然后我有大约10种方法,最多使用5种输入。现在,如果每个方法都有一个参数“用户输入对象”,那么界面看起来就干净多了。但每个方法并不需要所有这些属性。我可以传递每个方法所需的属性

我问这个问题的事实表明我承认我可能做错了事情

讨论……)

编辑:要添加计算,请执行以下操作:

用户可以在网页上输入有关其房屋和花园的详细信息。门的数量、房间数量和其他此类性质的财产(总共15个)

这些详细信息作为简单的整数属性存储在“HouseDetails”对象上

“HouseDetails”的实例被传递到“HouseRequirementScalCalculator”中。该类有10个私有方法,如“计算地毯面积”、“caclulateExtensionPotential”等

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

  • 我应该传递“HouseDetails”对象吗

  • 或者我应该通过“HouseDetails.MainRoomArea、HouseDetails.KitchenArea、HouseDetails.BathroomArea”等吗


基于我上面的回答,并与您的编辑相关:

a) 你应该通过“房屋详细信息” 反对

其他想法:

仔细考虑你的问题,特别是添加的细节,我想知道为什么你不把这些计算方法作为HouseDetails对象的一部分。毕竟,它们只是特定于该对象的计算。为什么要创建一个接口和另一个类来分别管理计算

旧文本:

每个方法都应该并且将会知道它需要引用传入对象的哪一部分来完成它的工作。您不需要/不应该通过在接口中创建细粒度重载来强制执行这些知识。传入的对象是您的模型和合同


另外,想象一下,如果您在此对象中添加和删除属性,代码将受到多大的影响。保持简单。

传递单个属性-在每种情况下都不同-看起来相当混乱。我宁愿传递整个物体

记住,你对自己的处境没有给予足够的洞察力。也许试着描述一下这些东西的实际用途?这个有15个属性的对象是什么?是同一个对象上的“使用最多5个输入的10个方法”,还是其他方法

在问题被编辑之后

我肯定应该传递整个对象,并在Calculator类中进行必要的计算

另一方面,您可能会发现领域驱动设计是一个有吸引力的选择(http://en.wikipedia.org/wiki/Domain-driven_design). 关于这些原则,您可以将calculator中的方法添加到HouseDetails类中。域驱动设计是一种非常好的应用程序编写风格,这取决于这种方式对您的清洁程度。

可能重复:我(可能我们)理解得很好。我认为应该传递HouseDetails对象,而不是单个参数。我在下面相应地修改了我的答案。