如果我从被调用方抛出错误,而不是从调用方抛出错误

本文关键字:错误 调用 方抛出 如果 | 更新日期: 2023-09-27 18:04:40

如果我从被调用方而不是从调用方抛出错误,这是可接受的/愿望吗?还是应该从调用方获取错误信息,然后从调用方抛出异常?哪一种是首选/渴望的方式?

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;
}

如果我从被调用方抛出错误,而不是从调用方抛出错误

你的答案是坚持单一职责原则

在您提供的示例中,方法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.");
    }
}

那么哪个方法应该在空列表上执行验证并抛出异常就变得清晰了。

换句话说,如果你把你的方法的职责分开,你就能更好地了解在哪里抛出异常。

IMHO,

如果你的类期望从客户端得到一些参数,你的框架类代码应该抛出异常,否则客户端应该处理返回的输出。