为了便于讨论,下面是一个示例函数,该函数逐行打印给定文件的内容。
版本1:
void printFile(const string & filePath) {
  fstream file(filePath, ios::in);
  string line;
  while (std::getline(file, line)) {
    cout << line << endl;
  }
}我知道建议函数在一个抽象级别上做一件事。对我来说,尽管上面的代码几乎做一件事,而且是原子的。
一些书(例如Robert C. Martin的Clean Code)似乎建议将上述代码分解为单独的函数。
版本2:
void printFile(const string & filePath) {
  fstream file(filePath, ios::in);
  printLines(file);
}
void printLines(fstream & file) {
  string line;
  while (std::getline(file, line)) {
    printLine(line);
  }
}
void printLine(const string & line) {
  cout << line << endl;
}我了解他们想要实现的目标(打开文件/读取行/打印行),但是这有点过分吗?
原始版本很简单,从某种意义上说已经做了一件事-打印文件。
第二个版本将导致大量非常小的功能,这些功能可能比第一个版本的可读性差很多。
在这种情况下,将代码放在一个地方会更好吗?
在什么时候“一件事”范式变得有害?
printFile,printLines最后是printLine。