Aus Gründen der Argumentation ist hier eine Beispielfunktion, die den Inhalt einer bestimmten Datei zeilenweise ausgibt.
Version 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Ich weiß, es wird empfohlen, dass Funktionen eine Sache auf einer Abstraktionsebene ausführen. Obwohl der obige Code so ziemlich eine Sache macht und ziemlich atomar ist.
Einige Bücher (wie Robert C. Martins Clean Code) scheinen zu empfehlen, den obigen Code in separate Funktionen aufzuteilen.
Version 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;
}
Ich verstehe, was sie erreichen wollen (Datei öffnen / Zeilen lesen / Zeile drucken), aber ist es nicht ein bisschen übertrieben?
Die Originalversion ist einfach und macht in gewisser Weise bereits eine Sache - druckt eine Datei.
Die zweite Version wird zu einer großen Anzahl wirklich kleiner Funktionen führen, die möglicherweise weitaus weniger lesbar sind als die erste Version.
Wäre es in diesem Fall nicht besser, den Code an einem Ort zu haben?
Ab wann wird das "Do One Thing" -Paradigma schädlich?
printFile
, printLines
und schließlich printLine
.