0

これは主観的なものですが、最低レベル以上で例外をキャッチする必要があります。普段から聞いてるから

try 
{
 //..
}
catch
{
 //LOG
}

したがって、次のような「低レベル」の機能を実装すると、

std::string read_from_file(const std::string& file_name);

何をすべきかわかりません:
1)呼び出し元に例外を処理させます。
2) catch (log?) と再スロー
3) bool が戻り値の型になるように関数を catch して変更します (try の最後の行は true を返します; catch の最後の行は false を返します;)。私はこれが好きではありませんが、私はそれが何度も行われるのを見てきました.
4) ???

4

1 に答える 1

1

真に扱えるレベルでキャッチするか、他に投げる場所がない時にキャッチする。

キャッチと再スローは、例外をより具体的なものにラップすることが目的でない限り、何も処理しません (たとえば、Spring の永続性は、SQL エラー コードを見て、より意味のあるものに SQLException をラップします)。

他に行くところがないこともあります。ユーザーがスタック トレースを表示することはないため、コントローラーはすべてをキャッチしてわかりやすいエラー ページにリダイレクトする必要があります。

戻り値の型をキャッチして変更することはできますが、ユーザーは情報を失っています。「true/false」は、スタック トレースと同じ情報を伝えません。キャッチされた例外に対して「成功」を返すのは、私には適切ではありません。

例外を処理できない場合は、処理できるレイヤーにバブルアップします。あなたがそれを扱うことができるなら、そうしてください。

于 2012-06-11T09:33:53.900 に答える