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 );
...
}
少なくとも私自身の観点からは、2 番目のアプローチの方が読みやすく、理解しやすく、見栄えの良いコードを提供することに同意します。だから、私の質問は、2 番目のアプローチに欠点はありますか? たとえば、考えられる問題の 1 つは、データベースなどへの一時的な接続に関するものです。
void SummarizeData(...) {
...
externalDataStore.open();
externalDataStore.save(oldData, numOldData);
externalDataStore.save(newData, numNewData);
externalDataStore.close();
...
}
この最初のアプローチでは、1 回のオープン/クローズ サイクルで両方の保存操作が完了します。ただし、2番目のアプローチでは...
void SummarizeData(...) {
...
externalDataStore.open();
externalDataStore.save(oldData, numOldData);
externalDataStore.close();
...
externalDataStore.open();
externalDataStore.save(newData, numNewData);
externalDataStore.close();
...
}
操作ごとに接続を開いたり閉じたりする必要があります。これは無駄に思えますが、実際のパフォーマンスにどのように影響するかわかりません。
不必要に長い質問で申し訳ありません...