【问题标题】:Bad method names and what it says about code structure错误的方法名称及其对代码结构的说明
【发布时间】:2010-05-24 20:38:41
【问题描述】:

(如果这是重新发布,请提前道歉,但我没有找到类似的帖子)

您在代码中看到过哪些糟糕的方法名称模式,它告诉您关于代码的哪些信息。

例如,我不断看到:

public void preform___X___IfNecessary(...);

我认为这很糟糕,因为操作 X 具有条件反转。请注意,这是一个公共方法,因为类方法可能合法地需要像这样的私有帮助器

【问题讨论】:

  • 这类主观问题应该是“社区维基”。请编辑您的问题并勾选方框。
  • “条件反转”是指调用者应该决定X 是否是必要的吗?
  • @Jeff Sternal , 是的,如果我的语言不清楚,很抱歉。

标签: oop methods method-names


【解决方案1】:

有时,开发人员似乎在使用简洁的措辞时遇到了问题。我有一个命名程序的人

InsertImportQueueRecord

讨厌这个名字。我把它改成

ImportItem

前者不仅使用繁琐的措辞来表达一个简单的概念,而且不必要地揭示了实现细节。调用者不需要知道使用了队列,如果他们这样做了,我会将其命名为 QueueItemImportScheduleImport 之类的名称,以指出项目的导入正在排队或计划中。此外,插入记录的概念是实现中的语言,而不是问题,应该避免。

【讨论】:

  • 这两个名字听起来像是描述了两个完全不同的过程。其中一个显然不合适,但很难从您的答案中分辨出哪个。
  • @Jeff Sternal:不,他们描述的是同一件事。在任何一种情况下,都会导入一个项目。一个只是揭示调用者不关心的实现细节,并使用解决方案的语言而不是问题的语言。但我已经提到了所有这些。
  • 我当然同意数据库术语,我想你是否公开排队的事实取决于调用者的抽象级别,所以我会收回它(虽然在我的代码中,有排队的事实肯定与呼叫者有关,ScheduleImport 会更合适)!
【解决方案2】:

thing()、doThing() 和 reallyDoThing()

当人们对函数应该做的事情并不完全清楚时,我会看到这一点。也许它首先检查是否需要任何操作,或者它更新缓存,或者它发送更改通知。谁知道?

有时这是因为不愿意更改方法名称。我讨厌这个。函数应该做他们听起来会做的事情。如果我要显着更改功能,我会更改名称,因此它迫使我修复所有调用者。

【讨论】:

    【解决方案3】:

    如果无法制定出简洁的方法名称,则很好地表明该方法试图做的事情太多,应该考虑重构。

    一个明显的例子是ValidateFormData_PersistToDB_SendEmail()

    虽然我是 C# 开发人员,但无论如何我都不敢使用下划线。

    【讨论】:

      【解决方案4】:

      我最近注意到的另一个,一堆私有方法的形式:

      private void SOMETHINGBecauseOf__a__(..);
      private void SOMETHINGBecauseOf__b__(..);
      private void SOMETHINGBecauseOf__c__(..);
      

      我想不出一个很好的理由在方法中使用因为Of,也想不出做同样的事情。对于一种方法中的 switch/if 语句来说,这看起来是一个很好的例子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-17
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 2014-05-06
        相关资源
        最近更新 更多