C# 命名复杂的方法

C# 命名复杂的方法,c#,sql,database,sharepoint,methods,C#,Sql,Database,Sharepoint,Methods,我有一种从数据库中提取数据的方法,我希望它能得到以下结果: 最多五个条目, 项目类型为新闻稿, 需要处于活动状态(PublishDate

我有一种从数据库中提取数据的方法,我希望它能得到以下结果:

最多五个条目, 项目类型为新闻稿, 需要处于活动状态(PublishDate 所以我想把它命名为GetFiveActiveNewslettersByCreatedDate()


这对我来说似乎有点长。我在网站上寻找一个好方法来命名这样的东西,你会如何处理它?

这样的东西怎么样

public IEnumerable<Newsletter> GetActiveNewsletters(int maxRecords = 5) 
{ 
    // ...
}
public IEnumerable GetActiveNewsletters(int-maxRecords=5)
{ 
// ...
}

Top 5仍然是默认值,但不再过于具体。

我会添加参数化方法,如

GerEntries(实体的T类型、日期时间、整数最大数)


并且自然地用注释记录方法

我建议将其重命名为:
GetNewsletters(int-recordCount=5)
通讯的数量将是该方法的一个参数


其余部分可以在
///Summary

中假设和描述,为了避免这种特定的命名,我会考虑将该方法设置为通用方法。比如:

GetNewsLetters(int amount, bool onlyActive, SortOrder orderBy)

命名该方法,以便任何开发人员都能清楚地了解该方法的作用。自我评论代码是王道。如果您的方法名太长,那么您可能在其中做了太多不同的事情,可能需要重构


至于你的具体例子,我对你所给的名字没有异议。

我个人避免在名字中加上“五”的原因是它可能意味着什么

例如,如果以后在某些场景中需要10份时事通讯而不是5份呢?好的,您需要创建一个额外的方法
getExecutiveNewslettesByCreatedDate()
。现在,您有了一个“设计模式”,当需要20、50、100份时事通讯时,后续开发人员将遵循该模式。这是一个会腐烂的设计,现在可以通过参数化五个参数来避免它


当然,这可能是YAGNI/推测的普遍性。如果5真的是一种魔力,坚不可摧,永远不会改变规则,那么你可能会谨慎地将其烘焙。我只是发现,我后悔做了那样的事,看到那样的事,而且这种情况的发生频率远远超过没有。

这个名字本身没有错。或者,您可以有一个方法,该方法接受一个最大值作为参数返回。硬编码为5是一种糟糕的做法。我建议您使用以下签名:
GetActiveNewsletters(int32大小)
进一步使用
ByCreatedDate
是多余的,因为
Active
已经带有时间谓词的含义。如果您使用by
ByCreatedDate
,则意味着您正在使用附加谓词进行选择。@Oybek Active是PublishedDate小于DateTime.now()的条件。我的意思是,如果一份时事通讯的出版日期是在将来,那么它就不会被删除。即使没有任何更改
GetFiveActiveNewsletters
也足够了。我建议不要使用公共默认参数,因为它们会被编译到调用程序集中,如果在不重新编译和重新部署所有调用方的情况下更新被调用的程序集,这可能会导致细微的错误。@MichaelStum:这一点很好。我想这要视情况而定。对于许多/大多数应用程序来说,这可能不是一个问题,因为对于公共API之类的应用程序来说,这是一个问题。