1,命名例子
这段代码做了什么?
public void processChapter(long chapterId) { Chapter chapter = this.repository.findByChapterId(chapterId); if (chapter == null) { throw new IllegalArgumentException("Unknown chapter [" + chapterId + "]"); } chapter.setTranslationState(TranslationState.TRANSLATING); this.repository.save(chapter); }
根据章节id从数据库中读取章节,把章节的状态改为翻译中,再把章节写回数据库。
把一个章节的翻译状态改为翻译中。
问题:需要阅读这段代码的细节,才能知道这段代码是做什么的?
将章节的状态改为翻译中,叫处理章节。
将章节的状态改为翻译完成,是不是也叫处理章节?
修改章节内容也叫处理章节?
命名过于宽泛,没有错,但不精准。
命名首先要能够描述这段代码做的事情。changeChapterToTranslating
如果把细节平铺开来,那本质上和直接阅读细节差别不大。
一个好的名字应该描述意图,而非细节。
我们为什么把翻译状态改为翻译中,这一定是有原因的,也就是意图。具体到这里的业务,我们把翻译状态修改为翻译中,是因为我们在这里开启了一个翻译的过程。所以,这段函数应该命名startTranslation。
2,
if (user.isEditor()) { service.editChapter(chapterId, title, content, true); } else { service.editChapter(chapterId, title, content, false); }
if判断的是参数,而不是动作。
到
boolean approved = user.isEditor(); service.editChapter(chapterId, title, content, approved);
到
boolean approved = isApproved(user); service.editChapter(chapterId, title, content, approved); private boolean isApproved(final User user) { return user.isEditor(); }