En aras del argumento, aquí hay una función de muestra que imprime el contenido de un archivo determinado línea por línea.
Versión 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Sé que se recomienda que las funciones hagan una cosa en un nivel de abstracción. Para mí, aunque el código anterior hace más o menos una cosa y es bastante atómico.
Algunos libros (como el Código Limpio de Robert C. Martin) parecen sugerir dividir el código anterior en funciones separadas.
Versión 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;
}
Entiendo lo que quieren lograr (abrir archivo / leer líneas / imprimir línea), pero ¿no es un poco exagerado?
La versión original es simple y, en cierto sentido, ya hace una cosa: imprime un archivo.
La segunda versión conducirá a una gran cantidad de funciones realmente pequeñas que pueden ser mucho menos legibles que la primera versión.
¿No sería, en este caso, mejor tener el código en un lugar?
¿En qué punto el paradigma "Do One Thing" se vuelve dañino?
printFile
, printLines
y, por último printLine
.