我有一个从数据库中提取数据的方法,我希望它得到这样的:命名复杂的方法
极限的五项, 项目类型是通讯, 需要被激活(PublishDate <日期时间。现在)
所以我想它命名GetFiveActiveNewslettersByCreatedDate的()
这似乎有点长了我。我在网站上看到了一个很好的方式来命名这样的事情,你将如何处理它?
我有一个从数据库中提取数据的方法,我希望它得到这样的:命名复杂的方法
极限的五项, 项目类型是通讯, 需要被激活(PublishDate <日期时间。现在)
所以我想它命名GetFiveActiveNewslettersByCreatedDate的()
这似乎有点长了我。我在网站上看到了一个很好的方式来命名这样的事情,你将如何处理它?
为了避免这个特定的命名,我会考虑使该方法通用。类似于:
GetNewsLetters(int amount, bool onlyActive, SortOrder orderBy)
这样的事情呢?
public IEnumerable<Newsletter> GetActiveNewsletters(int maxRecords = 5)
{
// ...
}
Top 5仍然是默认设置,但它不再是过分具体。
我建议不要公开默认参数,因为它们被编译到调用程序集中,如果更新调用程序集而不重新编译和重新部署所有调用者,这会导致微妙的错误。 – 2012-03-12 19:25:29
@MichaelStum:好点。我想这取决于情况。对于许多/大多数应用程序来说,这可能不是一个问题,因为它可能会像公共API那样。 – 2012-03-12 20:07:25
我想补充参数化方法,像
GerEntries(T typeofEntity, DateTime date, int maxNumber)
而且天然化文档的方法与评价
我会推荐它重命名为:GetNewsletters(int recordCount=5)
通讯的数量将是该方法的参数。
其余的可以假设和描述在///Summary
。
+1提及'/ /摘要' – Oybek 2012-03-12 19:24:16
将其命名,以便对任何开发人员明白该方法的作用。自我评论代码是国王。如果您的方法名称太长,您可能在其中做了太多不同的事情,并且会成为重构的候选人。
至于你的具体例子,我没有与你给的名字有关的问题。
我会避免在个人名义上烘烤“五”的原因是它可能意味着什么。
例如,如果以后,在某些情况下需要10个新闻稿而不是5个?那么,你会创建一个额外的方法GetTenActiveNewslettersByCreatedDate()
。而现在,你有一个'设计模式',随后的开发者将需要20,50,100条新闻通讯。这是一个会腐烂的设计,现在可以通过参数化五个参数来保存它。
当然,这可能是YAGNI /投机一般性。如果5真的是某种魔法,坚硬的,永远不会改变的规则,那么你可以小心翼翼地把它烧掉。我只是觉得我已经后悔了,并且看到了这样的事情,而且往往不是这样。
这个名字本身没有错。或者,你可以有一个方法,将最大数字作为参数返回。 – 2012-03-12 19:19:24
硬编码为5是一种不好的做法。我建议你签署以下签名:'GetActiveNewsletters(int32 size)' – Oybek 2012-03-12 19:20:17
进一步使用'ByCreatedDate'是多余的,因为'Active'已经带有时间谓词的含义。如果你使用'ByCreatedDate',这意味着你正在选择一个额外的谓词。 – Oybek 2012-03-12 19:23:14