印刷する関数の最も実用的なオプションはどれか疑問に思います。プリンターとそのような印刷方法があるとしましょう。
printerEngine.Print("StuffToPrint",Printer,Qty);
何かが失敗した場合、ブール値(この場合はfalse)を返すか、PrintingFailedイベントを発生させる必要があります。
印刷失敗イベントを使用すると、失敗した理由に関するコンテキストを追加できますが、続行するための最善の方法がわかりません。
印刷する関数の最も実用的なオプションはどれか疑問に思います。プリンターとそのような印刷方法があるとしましょう。
printerEngine.Print("StuffToPrint",Printer,Qty);
何かが失敗した場合、ブール値(この場合はfalse)を返すか、PrintingFailedイベントを発生させる必要があります。
印刷失敗イベントを使用すると、失敗した理由に関するコンテキストを追加できますが、続行するための最善の方法がわかりません。
もう1つの明らかなオプションは、ファイルなどに書き込もうとした場合と同じように、例外をスローすることです。
その例外には、必要なだけ詳細を含めることができ、スタックを処理するのに最も適切な場所にバブルアップさせることができます。
メソッドが非同期であることが意図されている場合はPrint
、を返すことを検討し、成功、失敗、完了などをTask
示すようにすることができます(.NET 4を使用していると仮定します)。
印刷ジョブが失敗する原因となる例外が発生したため、例外を使用して失敗する可能性があります。例外に必要なだけ詳細を含めて、必要な場所で処理できます。たぶん、boolを使用するのは、ジョブが失敗する原因となることが予想される場合にのみ使用してください。
例外処理に関するEricLippertのこのブログエントリをご覧ください。これは優れたガイドです。
それは、ユーザーに失敗した理由を提供するのか、それともある種のログに記録するのかによって異なります。これらのいずれかを実行したい場合は、イベントを発生させます。
これらのどちらも実行せず、失敗したかどうかを判断したい場合は、を使用してbool
ください。
ブール戻り値の追加は単純すぎて、発生する可能性のあるすべての問題を列挙し始めることはできません。いくつかのプリベークされたエラーコードがある可能性があります...しかし、それでも、必要な場合にコンテキストを提供することはできません。
イベントは大丈夫です。それはあなたが豊富な情報を返すことを可能にします。ただし、どちらのアプローチでも、完全に異なるプログラミングモデルが必要になります。また、例外は、それを呼び出したのと同じスタックスレッドで処理できます。イベントは、おそらく完全に異なるコンテキストで呼び出されます。例外を使用して発生する可能性のある障害を適切に処理するために利用できるすべての情報がない場合があります。したがって、トレードオフのバランスを取るのはあなた次第です。