在 Code Complete 第 10 章中,建议对相关语句进行分组,并给出以下示例:
void SummarizeData(...) {
...
GetOldData( oldData, &numOldData );
GetNewData( newData, &numNewData );
totalOldData = Sum( oldData, numOldData );
totalNewData = Sum( newData, numNewData );
PrintOldDataSummary( oldData, totalOldData, numOldData );
PrintNewDataSummary( newData, totalNewData, numNewData );
SaveOldDataSummary( totalOldData, numOldData );
SaveNewDataSummary( totalNewData, numNewData );
...
}
据说这样的分组和并发处理是不好的设计,而是给出了更分离的东西:
void SummarizeData(...) {
GetOldData( oldData, &numOldData );
totalOldData = Sum( oldData, numOldData );
PrintOldDataSummary( oldData, totalOldData, numOldData );
SaveOldDataSummary( totalOldData, numOldData );
...
GetNewData( newData, &numNewData );
totalNewData = Sum( newData, numNewData );
PrintNewDataSummary( newData, totalNewData, numNewData );
SaveNewDataSummary( totalNewData, numNewData );
...
}
我确实同意第二种方法更容易阅读和理解,并且提供看起来更清晰的代码,至少从我自己的角度来看是这样。所以,我的问题是,第二种方法有什么缺点吗?例如,我能想到的一个可能的问题是与数据库的临时连接等:
void SummarizeData(...) {
...
externalDataStore.open();
externalDataStore.save(oldData, numOldData);
externalDataStore.save(newData, numNewData);
externalDataStore.close();
...
}
第一种方法将在一个打开/关闭周期中完成两个保存操作。但是,使用第二种方法...
void SummarizeData(...) {
...
externalDataStore.open();
externalDataStore.save(oldData, numOldData);
externalDataStore.close();
...
externalDataStore.open();
externalDataStore.save(newData, numNewData);
externalDataStore.close();
...
}
您必须为每个操作打开和关闭连接。这似乎很浪费,但我不知道它如何影响实践中的性能。
对不起,不必要的长问题...