私は、そのAPIを通じて別のソフトウェアのアドインを作成しています。 APIによって返されるクラスは、ネイティブソフトウェアとAPIを介してのみアクセスできます。だから私は自分のスタンドアロンのPOCO/DTOオブジェクトをAPIクラスにマップしています。私はネイティブファイルを読み込んで、他の場所で盗むことができるこれらのPOCOオブジェクトのコレクションを返す機能に取り組んでいます。現在、私はJSON.NETを使ってこれらのクラスをJSONにシリアル化しています。私は私のDTOにネイティブ「人」を読むためにこの戻り値を含むエラーを含めるためのデザインパターン
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
}
..andこのような方法のようにDTOを持っているかもしれません例えば
はpublic static class MyDocReader
{
public static IList<MyPersonDTO> GetPersons(NativeDocument doc)
{
//Code to read Persons from doc and return MyPersonDTOs
}
}
は、私はユニットテストのセットアップを持つオブジェクトテストファイルを使用していますが、エクスポートを他のファイルで実行すると予期しない問題が発生します。ときどきネイティブオブジェクトに予期しない値があるか、APIにバグがあり、理由がない場合に例外がスローされます。
現在、「例外」が発生したときに例外が記録され、エクスポートが失敗します。しかし、私はできることを輸出し、どこかでエラーを記録することに決めました。
最も簡単なオプションは、例外をログして飲み込んで、できることを返すことですが、問題が発生したときに私の呼び出しコードが知る方法はありません。
私が検討しているオプションは、エラーの辞書を別の出力パラメータとして返すことです。キーは読み取ることができなかったプロパティを識別し、値には例外/エラーの詳細が含まれます。
public static class MyDocReader
{
public static IList<MyPersonDTO> persons GetPersons(NativeDocument doc, out IDictionary<string, string> errors)
{
//Code to read persons from doc
}
}
また、返すオブジェクト自体にエラーを格納することも考えていました。これはオブジェクトのサイズを膨らませますが、オブジェクトに直接エラーを格納するという利点があります。したがって、後で誰かのエクスポートがエラーを生成する場合、私は自分のコンピュータ上で正しいログファイルを追跡することを心配する必要はありません。
public class MyPersonDTO
{
public string Name {get; set;}
public string Age {get; set;}
public string Address {get; set;}
public IDictionary<string, string> Errors {get; set;}
}
これは通常どのように処理されますか?私が考慮していない戻り値と共にエラーを報告する別のオプションがありますか?
実装に依存して、Martin Fowlerは最後のオプションが最も有効であると考えます。あなたが何かがうまくいかないときに例外をスローする例外の方法もあります。 – Fals
マーティンがこれについて語っているブログ投稿やプレゼンテーションへのリンクがありますか? –
投稿のリンク先:http://martinfowler.com/articles/replaceThrowWithNotification.html – Fals