是否可接受/欲望如果我从被叫方而不是来电者那里抛出错误?或者我应该从被调用者获取错误信息然后从调用者抛出异常?哪一个是首选/渴望的方式?
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;
}
答案 0 :(得分:3)
你的回答是坚持Single responsibility principle 。
在您提供的示例中,方法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.");
}
}
然后很清楚哪个方法应该在空列表上执行验证并抛出异常。
换句话说,如果你将方法的责任分开,你就可以更好地了解抛出异常的位置。
答案 1 :(得分:0)
IMHO,
如果您的类期望来自客户端的某些参数,您的框架类代码应该抛出异常,否则客户端应该处理返回的输出。