假设我有以下内容
Class A {
Foo getFoo();
Bar getBar();
Baz getBaz();
}
我需要定义一个函数doStuff
使用Foo
, Bar
, Baz
of one对象并做一些事情
我在哪种实施方法之间挣扎doStuff
更好(假设不希望放置doStuff
课堂内A
)
Method A
void doStuff(Foo foo, Bar bar, Baz baz)
{
//some operation
}
or
Method B
void doStuff(A a)
{
Foo foo = a.getFoo();
Bar bar = a.getBar();
Baz baz = a.getBaz();
//some operation
}
据我有限的了解,
(+优点,-缺点)
Method A
+具体是什么参数一目了然doStuff()
运行于
- 容易受到长参数列表的影响,并且更容易出现用户错误
Method B
+简单易用的方法
+似乎更具可扩展性(?)
-对阶级造成不必要的依赖A
谁能分享对这两种方法的优缺点的更多见解?
方法 A(裸参数)始终具有以下优点:
- 它要求方法作者减少输入,因为他们不必实现参数对象,
- 它要求方法调用者键入更少的内容,因为他们不必实例化参数对象
- 它的性能更好,因为不需要构造参数对象和垃圾收集
- 读者可以仅从方法签名中看到各个参数是什么(但这是一把双刃剑;见下文)
方法B(参数对象 http://refactoring.com/catalog/introduceParameterObject.html)有优势,当
- 参数作为一个组具有域含义,因此可以为参数对象指定一个解释该含义的名称,从而使读者不必阅读和理解组中的每个成员以及它们之间的关系
- 参数列表在多个方法中使用,因此在每个方法中使用参数对象可以减少重复
- 参数列表中的值作为一个组在多个方法之间传递,当它们可以作为单个参数对象传递时会更容易
- 某些值的组合无效;参数对象可以防止这些组合
- 有些值是可选的,可以由参数对象提供,而不是(取决于您的语言)默认参数值或重载方法
- 有多个相同类型的参数,使得值交换错误的可能性更大(尽管在这种情况下参数对象也不是更好,如果它
有一个与方法具有相同参数列表的构造函数)
参数对象引入了调用者和被调用者所依赖的新依赖项,这并不是什么缺点,因为它是一个简单的类,没有自己的依赖项。
所以,参数对象是
- 对于单个参数几乎不值得,有时对于双参数方法值得(例如,Point 通常比 x,y 更好),有时则不值得,并且对于三个或更多参数越来越有帮助
- 当更多方法使用相同的参数列表时会变得越来越有用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)