Quand le paradigme «faire une chose» devient-il nocif?
https://softwareengineering.stackexchange.com/questions/121298
-
03-11-2019 - |
Question
Par souci d'argument, voici un exemple de fonction qui imprime le contenu d'un fichier donné en ligne par ligne.
Version 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Je sais qu'il est recommandé que les fonctions fassent une chose à un niveau d'abstraction. Pour moi, bien que le code ci-dessus fasse à peu près une chose et est assez atomique.
Certains livres (comme le code propre de Robert C. Martin) semblent suggérer de diviser le code ci-dessus en fonctions distinctes.
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;
}
Je comprends ce qu'ils veulent réaliser (ouvrir le fichier / les lignes de lecture / ligne d'impression), mais n'est-ce pas un peu exagéré?
La version originale est simple et en quelque sorte fait déjà une chose - imprime un fichier.
La deuxième version conduira à un grand nombre de fonctions vraiment petites qui peuvent être beaucoup moins lisibles que la première version.
Ne serait-il pas, dans ce cas, mieux d'avoir le code à un seul endroit?
À quel moment le paradigme «faire une chose» devient-il nocif?
Pas de solution correcte