gpt4 book ai didi

oop - 设计问题 : pass the fields you use or pass the object?

转载 作者:行者123 更新时间:2023-12-04 00:57:47 27 4
gpt4 key购买 nike

我经常看到方法接口(interface)的两种相互冲突的策略,大致概括如下:

// Form 1: Pass in an object.
double calculateTaxesOwed(TaxForm f) { ... }

// Form 2: Pass in the fields you'll use.
double calculateTaxesOwed(double taxRate, double income) { ... }

// use of form 1:
TaxForm f = ...
double payment = calculateTaxesOwed(f);

// use of form 2:
TaxForm f = ...
double payment = calculateTaxesOwed(f.getTaxRate(), f.getIncome());

我见过第二种形式的拥护者,特别是在动态语言中,可能更难评估正在使用的字段。

但是,我更喜欢第一种形式:它更短,出错的空间更小,如果对象的定义稍后发生更改,您不一定需要更新方法签名,也许只需更改您在方法。

这两种形式是否有令人信服的一般情况?是否有明确的例子说明何时应该使用第二种形式而不是第一种形式?有没有我可以指出的 SOLID 或其他 OOP 原则来证明我决定使用一种形式而不是另一种形式?如果您使用动态语言,上述任何答案是否会发生变化?

最佳答案

老实说,这取决于所讨论的方法。

如果该方法在没有对象的情况下有意义,那么第二种形式更容易重用,并消除了两个类之间的耦合。

如果该方法依赖于对象,则足够公平地传递对象。

对于第三种形式,您可能有一个很好的论据,您可以传递一个设计用于该方法的接口(interface)。为您提供第一种形式的清晰性和第二种形式的灵 active 。

关于oop - 设计问题 : pass the fields you use or pass the object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1092628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com