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具有(至少)两个职责:

  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

恕我直言,

如果您的任何类期望来自客户端的某些参数,您的框架类代码应该抛出异常,否则客户端应该处理返回的输出。

于 2013-03-18T10:14:32.323 回答