我有一个名为ActivityLog
的班级。该类包含ActivityRecords
的列表。我想通过这些标准返回ActivityRecords
列表:环境和条件。方法名称是否应包含“标准”?见例:
activityLog.allRecords();
activityLog.allRecordsBy(Environment environment);
activityLog.allRecordsBy(Condition condition);
activityLog.allRecordsBy(Condition condition, Environment environment);
或
activityLog.allRecordsByEnvironment(Environment environment);
activityLog.allRecordsByCondtion(Condition condition);
我可能认为第一个更好,因为你会阅读方法名称,你会从参数中了解它的作用,但我可能错了?哪个是最好的,还是有更好的选择?
我本可以命名方法records()
,recordsBy
等等,但我希望通过我的API获得一致,您始终可以开始为对象列表编写all
,以便您从Intelli Sense获得帮助。
答案 0 :(得分:3)
我喜欢将标准放在实际的方法名称中。所以我会用:
activityLog.allRecordsByEnvironment(环境环境);
对我来说,正确的方法命名表达了该方法的一些小概要。由于参数包含在方法签名中,因此我不会将参数视为实际名称的一部分,因此不在命名中放置条件会向用户提供有关方法功能的api不完整信息。 (IMO)
我赞赏你努力练习自我记录代码,很棒的做法。
答案 1 :(得分:1)
我会将其视为static factory methods
,它是命名构造函数。并且不仅参数说明了这种方法的作用,它的名称本身也是如此。所以我选择第二个选项。
@Bob,关于名字太长 - 即使你将2个参数放入其名称,它仍然适合我。无论如何,你应该避免使用超过3个参数的方法。遵循此规则将阻止您的方法的名称变得非常长。
答案 2 :(得分:1)
我喜欢重载的变体(你的第一个例子),因为它传达的方法都是相关的,并提供了大致相同的功能,也就是说,你返回的记录,按一些标准过滤。您将在许多开源库甚至SDK本身中看到这样的示例。
答案 3 :(得分:0)
OOP
中的方法代表行为,因此我将所有这些方法命名为getRecords()
并使其重载。
在我看来,在方法名称中指定标准就像命名像这样的层次结构
Car -> BMW_Car -> X5_BMW_Car
答案 4 :(得分:0)
我会选第一个。
如果这些方法做同样的事情或提供相同的功能,那么它们应该具有相同的名称。但请注意Effective Java Item 41和42.您必须确保至少有一个相应的重载方法参数具有完全不同的类型。
第二种方法在添加每个参数时变得非常快。我经常在Broker课程中看到这一点。有些人在编写像findByFirstnameAndLastnameAndBirthdayOrderByUgliness(blablub)
这样的方法。没有评论。