代码之丑 例子

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();
}

 

代码之丑 例子

上一篇:并发编程


下一篇:关于百度搜索的一些隐藏用法