Methods 长方法的方法名称

Methods 长方法的方法名称,methods,refactoring,fluent-interface,Methods,Refactoring,Fluent Interface,good style(干净的代码手册)说方法的名称应该描述该方法的功能。例如,如果我有一个方法来验证一个地址,将其存储在数据库中,然后发送一封电子邮件,那么名称应该是verifyaddress和storetodatabase和sendmail(address) 或 verifyAddress\u StoreToDatabase\u sendmail(地址) 虽然我可以将该功能划分为3个方法,但我仍然需要一个方法来调用这3个方法。因此,一个大的方法名称是不可避免的 拥有和命名方法当然描述了该方法的

good style(干净的代码手册)说方法的名称应该描述该方法的功能。例如,如果我有一个方法来验证一个地址,将其存储在数据库中,然后发送一封电子邮件,那么名称应该是
verifyaddress和storetodatabase和sendmail(address)

verifyAddress\u StoreToDatabase\u sendmail(地址)

虽然我可以将该功能划分为3个方法,但我仍然需要一个方法来调用这3个方法。因此,一个大的方法名称是不可避免的

拥有和命名方法当然描述了该方法的功能,但在我看来,它的可读性不强,因为名称可能非常大。你将如何解决它

编辑:也许我可以使用fluent样式来分解方法名称,例如:

verifyAddress(address.storeToDatabase().sendmail()


但我需要一种方法来确保调用的顺序。可能通过使用状态模式,但这会导致代码增长

单一方法不应该做三件事。因此,将工作分为3种方法:

  • 验证地址
  • 店址
  • 发送电子邮件

  • 我的方法是制作你提到的3个较小的方法,然后在调用3个较小方法的较高方法中,我以“为什么”命名,我需要做这三件事


    试着定义为什么需要执行这些步骤,并将其作为方法名称的基础。

    我正在跟进我之前的评论,但我在这里得到的信息超出了评论的合理范围,因此我在回答

    该方法的细节在文档中,而不是在方法的名称中(在我看来)。这样想吧。。。通过将
    sendmail
    放在方法名称中,您将实现细节提交到方法名称中。如果决定通过短信、推特或其他方式而不是电子邮件发送通知,该怎么办?您是否更改了方法的名称并破坏了API,或者您的方法名称误导了API的使用者?需要考虑的事情。< /P> 如果您坚持以名称保留该方法的功能,我会敦促您找到更通用的方法。也许是类似于
    验证saveandnotify(地址)
    的东西。这样,方法名就可以告诉您它在做什么,而不必指定它是如何做的。类型为
    Address
    的参数让您知道正在验证和保存的内容。所有这些共同作用使您的方法名称信息丰富、灵活且简洁

    编辑:也许我可以使用fluent样式来分解方法名称,例如:

    verifyAddress(address).storeToDatabase().sendEmail()

    但我需要一种方法来确保调用的顺序。可能通过使用状态模式,但这会导致代码增长

    为了确保以流畅的方式对命令进行排序,每个结果将是一个仅公开下一步所需功能的对象。例如:

    public class Verifier
    {
        public DataStorer VerifyAddress(string address)
        { 
            ...
            return new DataStorer(address);
        }
    }
    
    public class DataStorer
    {
        public Emailer StoreToDataBase()
        {
            ...
            return new Emailer(...);
        }
    }
    
    public class Emailer
    {
        public void SendEmail()
        {
            ...
        }
    }
    

    如果您需要创建一个非常细粒度的设计,并希望优化类以实现可重用性,那么这很方便,但在大多数情况下可能是设计过度。正如其他人所说,最好选择一个代表整个过程应该代表的名称。您可以简单地称之为“StoreAndEmail”,假设验证是您在将数据提交到任何目的地之前经常做的事情。如果你不介意名字太长,另一种选择是简单地完整描述它,并接受一个长名字是必要的。最后,它确实不需要花费任何费用,但肯定可以使您的代码更加明确。

    您可以做3件事,好的,请考虑一个名称,通过调用这3个步骤来描述您正在做的事情。它有名字吗?好的,这就是方法名称,我同意Hernan。当我有多个步骤去做某事时,总有一个总的目标。如果它不够具体,那么总会有一些通用的目标,比如处理。在您的情况下,processAddress(address)方法可以在各自的方法中调用您的3个单独步骤。但是
    processAddress
    非常通用,IMO没有对读者说明该方法的用途。充实这一建议,我会使用一个公共方法
    SaveAddress
    ,它调用三个私有方法:
    verifyAddress
    insertAddress
    ,和
    sendmail
    @Rick,但是将它命名为
    saveAddress
    并不能说明发送电子邮件的协同效应。@ejaenv一种看待它的方法是将它命名为
    HandleSaveAddressRequest
    或类似的名称。如果“为什么”没有意义,那么有时将目标或行动描述为处理事件可能是另一种解决方案。但正如我所说的,在某个时候,你需要将这三件事联系起来。(顺便说一句,单一责任原则说的是一个方法应该做一件事,但这件事指的是一个抽象层次)