它是否可接受/欲望如果我从被叫方而不是来自呼叫方抛出错误

时间:2013-03-18 10:11:14

标签: c# .net coding-style

是否可接受/欲望如果我从被叫方而不是来电者那里抛出错误?或者我应该从被调用者获取错误信息然后从调用者抛出异常?哪一个是首选/渴望的方式?

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

2 个答案:

答案 0 :(得分:3)

你的回答是坚持Single responsibility principle

在您提供的示例中,方法GetProductBuilders具有(至少)两个职责:

  1. 填充对象集合
  2. 验证结果计数
  3. 如果您将代码重构为:

    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.");
        }
    }
    

    然后很清楚哪个方法应该在空列表上执行验证并抛出异常。

    换句话说,如果你将方法的责任分开,你就可以更好地了解抛出异常的位置。

答案 1 :(得分:0)

IMHO,

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