如果我从被调用方抛出错误,而不是从调用方抛出错误
本文关键字:错误 调用 方抛出 如果 | 更新日期: 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
具有(至少)两个职责:
- 填充对象集合
- 验证结果计数
如果你重构你的代码:
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,
如果你的类期望从客户端得到一些参数,你的框架类代码应该抛出异常,否则客户端应该处理返回的输出。