我一直在阅读一些教程和示例代码,试图学习单元测试和存储库模式,我试图弄清楚如何使用隐式声明的类型处理异常。
例如,假设我使用以下内容创建和发布对象。
var issue = issueRepository.GetIssueById(issueId);
如果我在try catch块中创建它,那么变量将只限于try,所以我必须在try中包含与此相关的所有内容。我可以在尝试之外将问题声明为一个新问题,但我一直在阅读的最佳实践建议说尽可能使用隐式。将try catch放在存储库中更好吗?如果是这样,你会如何回到控制器?
很抱歉,如果问题很简陋,但我还没有找到任何可以使用这些模式进行异常处理的示例代码。
答案 0 :(得分:0)
一种方法是这样,但这种方式是在Repository
级别推动异常,这将使调用者更多地关注业务规则。
public abstract class BaseRepository<TYPE, IDTYPE>
{
public TYPE GetById(IDTYPE id)
{
return getById(id);
}
protected abstract TYPE getById(IDTYPE id);
}
public class IssueRepository : BaseRepository <Issue, int>
{
protected override Issue getById(int id)
{
var result = context.Issues.FirstOrDefault(i => i.Id == id);
// or even do First() which would throw exception if not found
if (result == null)
{
throw new NotFoundException("Issue was not found with Id: {0}", id);
}
return result;
}
}