为了便于讨论,下面是一个示例函数,该函数逐行打印给定文件的内容。
版本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
。