使用5种不同方法参数的不良做法?

时间:2012-06-20 17:18:19

标签: objective-c ios

我有两个按钮,每个按钮可以执行两种不同的实现(无论是否选中),因此总共有4种可能的实现。在对它进行编码后,我注意到每个实现都有20多行代码,每个变量只有1或2个变量。我决定要清理它并让每个实现调用单独的,更小的方法并将不一致的变量作为参数传递。

我认为这是一个更好的做法b / c我正在重用代码。但是,在我的一个方法中,我必须通过5个不同的参数来实现具有正确条件的方法。

在方法中有这么多参数是不好的做法吗?

6 个答案:

答案 0 :(得分:3)

拥有许多参数并不是一件坏事。

有些模式可以创建一个类,将所有参数分组到一个对象中,这对您来说可能看起来更干净。另一种方法是使用字典将所有参数作为单个配置参数。一些Apples类就是这样做的(例如title font configuration in the navigation bar)。

个人会说代码重复比许多相互调用并且有多个参数的方法更糟糕。

答案 1 :(得分:2)

如果它允许你删除许多重复的行,我没有看到任何问题这样做。 如果要删除1或2行,那么可能不值得付出努力。

实际上,您可以根据需要传递尽可能多的参数。可能还有其他方法可以实现您要实现的目标,但如果没有代码,您的5个参数乍一看似乎是有效的。

答案 2 :(得分:2)

没有特定数量的参数通常是“不良做法”。方法应该具有所需的参数。也就是说,存在具有大量参数的情况可能表明可能有更好的设计。例如,在某些情况下,您可能会意识到对象应该跟踪成员变量中的某些值,而不是每次都将值传递给其方法。

答案 3 :(得分:2)

我认为使用5个参数是可以的,因为某些Objective-c默认方法也有4个参数,如

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(updateConvMenu:)
                                 notificationName:@"NSConvertersChanged" 
                                           object:converterArray];

我们可以采取哪些措施来更清晰地为您的代码提供更好的格式

答案 4 :(得分:2)

免责声明:我知道zilch关于客观c

如果没有看到相关代码,很难说,这完全取决于你在做什么。要说有一个带有五个参数的方法是不好的做法,有点推测,尽管保持方法参数的数量尽可能小是当然的好习惯。

事实上,这个方法听起来像是一个内部的“助手”方法(而不是一个公开暴露的API组件),这样你就可以获得更多的背风,但通常你不希望处于某种情况其中一个方法根据一些神秘的参数组合做了不同的事情。

当我遇到带有令人不舒服的长签名的方法而无法在不创建冗余代码的情况下进行重组时,我通常会执行以下操作之一:

  • 用几种更简洁的方法包装攻击性方法。作为示例,您可以为每个“实现”创建一个方法,其中一个好的名称表明其目的只接受为此目的所需的参数。然后它会委托内部的,有气味的方法。臭方法只会在你的'特定于实现'的包装器中使用,而不是分散在整个代码中。使用命名良好的包装器,开发人员将理解您的意图,而无需破译参数的含义。

  • 创建一个封装方法所需数据的类。如果该方法的作用取决于某个系统或子系统的状态,则封装该状态!我经常使用'XXContext'类型类来执行此操作。现在,您的方法可以检查和分析此上下文数据并采取适当的操作。这也适用于重构。如果将来的方法需要更多信息来完成其任务或实现新功能,则可以将此数据添加到参数对象,而不必更改使用该方法的每一段代码。只有需要使用更改的代码才能为上下文数据提供适当的值。

答案 5 :(得分:1)

这是一个很难明确回答的主观问题之一。

我不介意Objective C方法中的一些参数,因为它可以使被调用的API更加清晰(并且参数可以很好并且类型安全)。

如果您可以将这些功能提炼到较少数量的功能(或从所有其他功能调用的“基本”功能),那么这可能也会使更容易理解的代码更容易理解。此外,如果您对“基础”功能进行更新,功能更改将通过您调用操作的所有方式进行选择(当然,这也可能是好事或坏事)。