Vì mục đích tranh luận ở đây, một hàm mẫu in nội dung của từng dòng tệp đã cho.
Phiên bản 1:
void printFile(const string & filePath) {
fstream file(filePath, ios::in);
string line;
while (std::getline(file, line)) {
cout << line << endl;
}
}
Tôi biết rằng các hàm nên làm một việc ở một mức độ trừu tượng. Đối với tôi, mặc dù mã ở trên có khá nhiều thứ và khá nguyên tử.
Một số cuốn sách (như Clean Code của Robert C. Martin) dường như đề nghị chia mã trên thành các chức năng riêng biệt.
Phiên bả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;
}
Tôi hiểu những gì họ muốn đạt được (mở tệp / đọc dòng / dòng in), nhưng đó không phải là một chút quá mức?
Phiên bản gốc rất đơn giản và theo một nghĩa nào đó đã thực hiện một điều - in một tệp.
Phiên bản thứ hai sẽ dẫn đến một số lượng lớn các chức năng thực sự nhỏ có thể dễ đọc hơn nhiều so với phiên bản đầu tiên.
Trong trường hợp này, không nên để mã ở một nơi chứ?
Tại thời điểm nào mô hình "Do One Thing" trở nên có hại?
printFile
, printLines
và cuối cùng printLine
.