web-dev-qa-db-ja.com

C#でエンタープライズプロジェクトのエラーコードパターンを作成するためのベストプラクティス

私は多くのSMBとエンタープライズに展開されるエンタープライズプロジェクトに取り組んでいます。
このプロジェクトのサポートは困難なため、エラーのコーディングパターンを作成したいと思います(Like HTTP status Codes)。これにより、ヘルプデスクの担当者はドキュメントを参照し、問題をできるだけ早くトラブルシューティングできます。

これを行うためのベストプラクティスと推奨事項は何ですか?
これを行うための助けがあれば役に立ちます。

45
Pooya

エラーコードとエラー戻り値には違いがあります。エラーコードはユーザーとヘルプデスク用です。エラー戻り値は、コードでエラーが発生したことを示すコーディング手法です。

エラーの戻り値を使用してエラーコードを実装することもできますが、これはお勧めしません。例外はエラーを報告するための最新の方法であり、エラーコードをエラーに含めるべきではありません。

これは私がそれを整理する方法です(ポイント2-6は言語にとらわれないことに注意してください):

  1. ErrorCodeプロパティを追加して、カスタム例外タイプを使用します。メインループのキャッチは、通常の方法でこのフィールドを報告します(ログファイル/エラーポップアップ/エラー応答)。すべてのコードで同じ例外タイプを使用します。
  2. 1から始めないでください。また、先行ゼロを使用しないでください。すべてのエラーコードを同じ長さにして、間違ったエラーコードを見つけやすいようにします。通常1000から始めれば十分です。おそらく、ユーザーに明確に識別できるように、先頭に「E」を追加します(特に、サポートデスクがユーザーにエラーコードを見つける方法を指示する必要がある場合に役立ちます)。
  3. すべてのエラーコードのリストを保持しますが、コードではこれを行わないでください。新しいコードが必要なときに簡単に編集できる、開発者向けのウィキページに短いリストを保管してください。ヘルプデスクは、独自のWikiに個別のリストを用意する必要があります。
  4. エラーコードに構造を適用しないでください。エラーを分類するのは常に困難であり、エラーが45xxグループにあるのか、54xxグループにあるのかについて、何時間も話し合う必要はありません。 実用的であること
  5. コードの各スローに個別のコードを割り当てます。同じ原因だと思っていても、場合によってはヘルプデスクが異なることを行う必要があります。ユーザーに自分のwikiに「E1234:See E1235」を含める方が、ユーザーに間違ったことを告白させるよりも簡単です。
  6. ヘルプデスクから要求された場合は、エラーコードを分割します。コードの単純なif (...) throw new FooException(1234, ".."); else throw new FooException(1235, "..");行は、ヘルプデスクの時間を30分節約する可能性があります。

そして、エラーコードの目的がヘルプデスクの作業を容易にするであることを忘れないでください。

70
Sjoerd

まず、エラーが発生する可能性があり、ユーザーに表示される領域を分離する必要があります。次に、それらを文書化できます。とてもシンプルです。

ええと、理論的には単純です。実際にはエラーはあちこちで発生する可能性があり、それらを報告すると、Niceコードがロギング、例外のスローと処理、および戻り値の受け渡しのモンスターに変わる可能性があります。

その場合、2ステップのアプローチをお勧めします。最初は、ログを記録することです。

2つ目は、主要なコンポーネントとそのインターフェイスを特定し、これらのコンポーネントが検出できる主要なエラーケースを定義することです。これらのエラーの1つ(内部でのエラーの処理方法はユーザー次第)になったら、より目に見える方法でログインできます。 -例外またはエラーコードは、ここでは違いはありません)。通常、ユーザーはエラーを確認し、ログで詳細情報を確認します。

同じアプローチがWebサーバーとhttpエラーコードの例に使用されます。ユーザーが404を確認し、それをサポートに報告した場合、何が起こっているか、どのページがいつ訪れたかの詳細をログで調べ、意味のある場所から他の情報を収集します。 、DB、ネットワーク、またはアプリケーション内にあります。

6
gbjbaanb

わかりやすい名前と明確なメッセージを使用してカスタム例外を作成し、それらをスローします。エラーコードの受け渡しと解釈のサポートを組み込むよりも、言語の既存の例外インフラストラクチャを使用する方がはるかに簡単です。

3
Stefan Billiet