0

呼び出し元ではなく呼び出し先からエラーをスローした場合、それは受け入れられますか? または、呼び出し先からエラー情報を取得してから、呼び出し元から例外をスローする必要がありますか? どちらが好ましい/望ましい方法ですか?

public static List<ProductBuilder> GetProductBuilders(GetProductsRequest productsRequest)
{
    List<ProductBuilder> productBuilders = new List<ProductBuilder>();
    ...
    ... // Some logics to populate productBuilders

   if (productBuilders.Count == 0)
    {
        Logger.LogMessage(productsRequest.SessionId, "No ProductBuilders were created.");
        throw new ProductException(ProductException.ExceptionCode.SaveFailed, "No Service has qualified.");
    }

    return productBuilders;
}
4

2 に答える 2

3

あなたの答えは、単一責任の原則に固執することです。

提供した例では、メソッドGetProductBuildersには(少なくとも)2つの責任があります。

  1. オブジェクトのコレクションにデータを入力します
  2. 結果カウントを検証する

コードを次のようにリファクタリングする場合:

public static List<ProductBuilder> PopulateProductBuilders(...)
{
    // Logic to populate the collection
}

public static List<ProductBuilder> GetProductBuilders(GetProductsRequest productsRequest)
{
    var productBuilders = PopulateProductBuilders();
    if(!productBuilders.Any())
    {
        Logger.LogMessage(productsRequest.SessionId, "No ProductBuilders were created.");
        throw new ProductException(ProductException.ExceptionCode.SaveFailed, "No Service has qualified.");
    }
}

次に、どのメソッドが空のリストに対して検証を実行し、例外をスローするかが明確になります。

つまり、メソッドの責任を分離すると、例外をスローする場所をより正確に把握できるようになります。

于 2013-03-18T10:33:29.037 に答える
0

私見では、

クラスが client からのパラメータを予期している場合、フレームワーク クラス コードは例外をスローする必要があります。それ以外の場合、クライアントは返された出力を処理する必要があります。

于 2013-03-18T10:14:32.323 に答える