2012-03-12 61 views
7

我有一个从数据库中提取数据的方法,我希望它得到这样的:命名复杂的方法

极限的五

项, 项目类型是通讯, 需要被激活(PublishDate <日期时间。现在)

所以我想它命名GetFiveActiveNewslettersByCreatedDate的()

这似乎有点长了我。我在网站上看到了一个很好的方式来命名这样的事情,你将如何处理它?

+3

这个名字本身没有错。或者,你可以有一个方法,将最大数字作为参数返回。 – 2012-03-12 19:19:24

+3

硬编码为5是一种不好的做法。我建议你签署以下签名:'GetActiveNewsletters(int32 size)' – Oybek 2012-03-12 19:20:17

+1

进一步使用'ByCreatedDate'是多余的,因为'Active'已经带有时间谓词的含义。如果你使用'ByCreatedDate',这意味着你正在选择一个额外的谓词。 – Oybek 2012-03-12 19:23:14

回答

4

为了避免这个特定的命名,我会考虑使该方法通用。类似于:

GetNewsLetters(int amount, bool onlyActive, SortOrder orderBy) 
12

这样的事情呢?

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

Top 5仍然是默认设置,但它不再是过分具体。

+4

我建议不要公开默认参数,因为它们被编译到调用程序集中,如果更新调用程序集而不重新编译和重新部署所有调用者,这会导致微妙的错误。 – 2012-03-12 19:25:29

+0

@MichaelStum:好点。我想这取决于情况。对于许多/大多数应用程序来说,这可能不是一个问题,因为它可能会像公共API那样。 – 2012-03-12 20:07:25

1

我想补充参数化方法,像

GerEntries(T typeofEntity, DateTime date, int maxNumber)

而且天然化文档的方法与评价

5

我会推荐它重命名为:GetNewsletters(int recordCount=5) 通讯的数量将是该方法的参数。

其余的可以假设和描述在///Summary

+1

+1提及'/ /摘要' – Oybek 2012-03-12 19:24:16

2

将其命名,以便对任何开发人员明白该方法的作用。自我评论代码是国王。如果您的方法名称太长,您可能在其中做了太多不同的事情,并且会成为重构的候选人。

至于你的具体例子,我没有与你给的名字有关的问题。

8

我会避免在个人名义上烘烤“五”的原因是它可能意味着什么。

例如,如果以后,在某些情况下需要10个新闻稿而不是5个?那么,你会创建一个额外的方法GetTenActiveNewslettersByCreatedDate()。而现在,你有一个'设计模式',随后的开发者将需要20,50,100条新闻通讯。这是一个会腐烂的设计,现在可以通过参数化五个参数来保存它。

当然,这可能是YAGNI /投机一般性。如果5真的是某种魔法,坚硬的,永远不会改变的规则,那么你可以小心翼翼地把它烧掉。我只是觉得我已经后悔了,并且看到了这样的事情,而且往往不是这样。