【问题标题】:Is extracting method parameters as an object a good idea?将方法参数作为对象提取是个好主意吗?
【发布时间】:2012-12-03 05:30:45
【问题描述】:

http://www.jetbrains.com/idea/webhelp/extract-parameter-object.html

对于具有大量参数的方法,我一直认为将方法参数提取为对象是一个好主意。

public void Method(A a, B b, C c, D d, E e);

变成

public class Wrapper {A; B; C; D}

public void Method(Wrapper wrapper);

这让我可以:

  • 在我的代码中具有更好的可读性
  • 在 Wrapper 类中执行这些参数的验证,并在需要时跨层/组件重用它。
  • 提供不那么脆弱的方法签名。

您对此是否有任何其他优点/缺点可以帮助说服正在编写具有大量参数的方法的人?如果这有什么不同,我正在编写 C# 4。

【问题讨论】:

  • 这对于一组相关的参数可能没问题。如果您有大量参数,则可能是存在独立子集的情况。您不想将独立的子集耦合在一起。

标签: coding-style refactoring


【解决方案1】:

我能想到的唯一缺点是在您的系统中有一个额外的抽象,要求您在访问之前提取(虽然微不足道)实际数据。我什至不确定这是否可以称为劣势。

参数封装最重要的优势是拥有一个强大且定义明确的接口,可以适应未来的变化。

【讨论】:

    【解决方案2】:

    一个更深层次的优势是,当您将参数包装在一个新类中时,您会意识到某些行为可以移动到新类中。这是因为修改参数的方法的主体可能会类似地操作参数。将这种常见行为移到新类中可以让您删除大量代码重复。参数验证只是可以移入新类的行为的一个示例。

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      相关资源
      最近更新 更多