システムエラー、例外処理(Java、C++、Perl、PHP)から公開/許容/回復するための設計パターン/アプローチを推奨できますか?
いくつかのエラーを報告する必要があります。
一部のエラーは内部で処理できます(再試行によって、または重要ではない(無視できる))。
それらをキャッチするためにコードをどのように構成しますか?
ただし、すべてのエラーはログに記録する必要があります。
どのようなベストプラクティスがありますか?
そして、それらをシミュレートして、それらの影響を受けるコンポーネントを完全にテストできるようにしますか?
いくつかの最新のプログラミング言語に当てはまる一般的な非プログラミング言語固有の質問ですが、Java、C++、PHPおよびPerlでのパターン、アプローチ、および哲学の例図を歓迎します。
(また、stackoverflowで尋ねられました: https://stackoverflow.com/questions/7432596/recommend-a-design-pattern-approach-to-exposing-tolerating-recovering-from-system しかし、私はそれを考えましたプログラマーにも質問する必要があります。なぜなら、プログラマーのQ&Aはより広いソフトウェア/プログラミングの問題をカバーしているのに対し、stackoverflowは技術的な実装に関するものですIMHO)。
Fail fastは優れた設計アプローチであり、おそらくパターンとして数えることができます: http://en.wikipedia.org/ wiki/Fail-fast
また、いくつかの原則が役立つことがわかりました。
Javaと.NETで例外を処理した後、例外をキャッチする方法/時期/理由についての記事たくさんを読んだ後、ようやく次の手順を思いつきました。例外が発生する可能性がある場合、またはキャッチしなければならない例外(Java)が発生した場合でも、頭の中を通り抜けます(Javaの場合)。
stepも追加する必要があります。複雑な処理を実行できない場合、意図的に「ビジネス」例外(「Exception」クラスを拡張して作成した新しい例外)を意図的にスローしています。データエラーのため、分析中に例外ケースとして識別されたために発生することがわかっているBUT。
伐採部分を除いて、私は「ミケラ」が書いた点に完全に同意します。例外は一度だけ記録のみであることを追加します。
また、-記述している手順がAPI /フレームワークの場合、ここに記載されている手順は異なる場合があります。そこでは、うまく設計された例外を投げることは、開発者が間違いを理解するのを助けるために必須です。
例外のテストについては、モックオブジェクトを使用すると、クラスが「1つのクラスで1つのことを実行する」ベストプラクティスを尊重していれば、例外かどうかにかかわらず、ほぼすべてをテストできるはずです。また、個人的には、最も重要ではあるが隠されたメソッドを「プライベート」ではなく「保護」としてマークして、手間をかけずにテストできるようにしています。それとは別に、例外のテストは簡単です。例外を引き起こし、それをキャッチすることで例外が発生することを「期待」するだけです。例外が発生しない場合は、ユニットテストケースエラーが発生しています。
オブジェクトを正しい方法で構築し、外部要因について心配しないでください。例外を利用することを選択した場合は、オブジェクトがfailで例外をスローするようにします。
すべてのオブジェクトが正しく機能するようになれば、デザイン内でエラー処理の責任階層を明確にすることはかなり簡単になります。