我正在实现一个类来表示旧文件。这些文件是二进制文件,需要大量解析。可能会有数千行代码来解析文件。我在类中有两个构造函数:
class CrmxFile {
public:
CrmxFile(std::wstring filename);
CrmxFile(std::ifstream& file);
...
}
由于没有文件的内容,对象就没有意义,所有的解析都需要在构造对象时完成。我打算实现一个大型构造函数(带有流参数的构造函数),但我的一位同事认为拥有非常大的构造函数不是一个好习惯。相反,我应该创建一个私有方法来进行解析,并在检查流是否可读之后从构造函数调用此方法,并且可能读取文件头以验证流是否包含正确的数据。
是否有任何指导方针/规则/约定/等。管理这种情况?本质上(在伪代码中),这两种方法中的哪一种更好,
长构造函数:
CrmxFile::CrmxFile(std::ifstream& file) {
if (file is not readable) {
throw new CmrxException(read_error);
}
CmrxHeader header(file);
if(!header.isValid()) {
throw new CmrxException(invalid_file);
}
//now do all the reading/parsing of the file
//constructor may end up being a thousand lines of code
...
}
或简短的构造函数和辅助方法:
class CrmxFile {
public:
CrmxFile(std::wstring filename);
CrmxFile(std::ifstream& file);
private:
ParseFile(std::ifstream& file);
...
}
CrmxFile::CrmxFile(std::ifstream& file) {
if (file is not readable) {
throw new CrmxException(read_error);
}
CrmxHeader header(file);
if(!header.isValid()) {
throw new CrmxException(invalid_file);
}
ParseFile(file);
}
void CrmxFile::ParseFile(std::ifstream& file) {
//do all the reading/parsing of the file here
...
}