gpt4 book ai didi

design-patterns - 传递单个对象与传递多个参数

转载 作者:行者123 更新时间:2023-12-03 11:38:08 29 4
gpt4 key购买 nike

假设我有以下内容

Class A {
Foo getFoo();
Bar getBar();
Baz getBaz();
}

并且我需要定义一个函数 doStuff,该函数使用 一个对象的 FooBarBaz并执行一些操作

我正在努力实现哪种更好的 doStuff方法之间挣扎(假设将 doStuff放在类 A内是不希望的)

方法A
void doStuff(Foo foo, Bar bar, Baz baz)
{
//some operation
}

要么

方法B
void doStuff(A a)
{
Foo foo = a.getFoo();
Bar bar = a.getBar();
Baz baz = a.getBaz();
//some operation
}

据我所知,
(+优点,-缺点)

方法A

+很清楚 doStuff()可以对哪些参数进行操作

-易受长参数列表的影响,更容易出现用户错误

方法B

+简单易用的方法

+似乎更可扩展(?)

-对类 A创建不必要的依赖

谁能对这两种方法的利弊分享更多见解?

最佳答案

方法A(裸参数)始终具有以下优点:

  • ,它不需要方法作者,因为他们不必实现参数对象
  • 它要求方法调用者键入较少的内容,因为它们不必实例化参数对象
  • 性能更好,因为无需构造参数对象并且无需进行垃圾收集
  • 读者可以单独从方法签名中看到各个参数(但这是一把双刃剑;请参见下文)。

    方法B(Parameter Object)在以下情况下具有优势
  • 参数具有作为组的域含义,因此可以为参数对象指定一个解释该含义的名称,从而使阅读者不必阅读和理解码的每个成员以及它们如何与
  • 相关联
  • 参数列表在多种方法中使用,因此在每种方法中使用Parameter Object可以减少重复
  • 参数列表中的值作为一组在多个方法之间传递,当它们可以作为单个参数对象传递时更容易
  • 某些值组合无效;参数对象可以防止这些组合
  • 一些值是可选的,可以由参数对象提供,而不是(取决于您的语言)默认参数值或重载方法
  • 有多个相同类型的参数,使值交换错误发生的可能性更高(尽管在这种情况下,使用Parameter Object并不会更好)
    具有与方法相同的参数列表的构造函数)

  • 参数对象引入了一个新的依赖关系,调用方和被调用方都依赖于此,这并不是什么缺点,因为它是一个简单的类,没有自己的依赖项。

    因此,参数对象是
  • 对于单个参数几乎永远都不值得,有时对于两个参数的方法值得(例如,Point通常优于x,y),有时却不值得,并且对于三个或更多参数
  • 越来越有用
    当更多方法使用相同的参数列表时,
  • 越来越有用

  • 关于design-patterns - 传递单个对象与传递多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36904955/

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