是否有最佳实践或普遍接受的模式来命名方法,以 Java API 的流畅风格将某些内容“添加”到不可变对象(immutable对象)的集合中?
这是一个代码示例:
public class GivenUUIDGenerator {
private final ImmutableList<String> playbackUUIDs;
public GivenUUIDGenerator(List<String> playbackUUIDs) {
this.playbackUUIDs = ImmutableList.copyOf(playbackUUIDs);
}
public GivenUUIDGenerator howShouldINameThisMethod(String uuid){
return new GivenUUIDGenerator(ImmutableList.<String>builder().addAll(playbackUUIDs).add(uuid).build());
}
}
这来自 Pull Request在我正在开发的一个项目中,我们已经讨论过此方法的最佳命名选项,但都是法国人并不能帮助选择一个好名字。
我尝试寻找现有技术或最佳实践,这是我迄今为止发现的:
- Martin Fowler's article on Fluent Interface只需使用
with
将订单行添加到订单中,但我不知道如此通用(不命名我们要添加的内容)是否是一个不错的选择。 - Apache Commons HttpClient fluent API使用
addXXX
但它是 not immutable . - jaxb-fluent-api project使用
withNewXXX
约定,但行为不同,它实际上是创建一个项目实例,而不是添加现有的实例
我得到的其他建议:
- 原始公关主张:
withAddedXXX
- 另一个提议:
withAdditionalXXX
最佳答案
我建议使用和
,而不是修改原始列表。因此,你可以有这样的东西:
GivenUUIDGenerator.with(originalList).and(a).and(b).and(c).generate();
这就是类的样子:
public class GivenUUIDGenerator {
public static GivenUUIDGenerator with(List<String> playbackUUIDs) {
return new GivenUUIDGenerator(playbackUUIDs);
}
private final ImmutableList<String> playbackUUIDs;
private GivenUUIDGenerator(List<String> playbackUUIDs) {
this.playbackUUIDs = ImmutableList.copyOf(playbackUUIDs);
}
public GivenUUIDGenerator and(String uuid){
return new GivenUUIDGenerator(ImmutableList.<String>builder().addAll(playbackUUIDs).add(uuid).build());
}
public ... generate() {
// ... do here whatever it is you want to do with your list
}
}
关于java - 以流畅的风格将项目添加到不可变对象(immutable对象)的命名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474710/