【发布时间】:2018-05-24 18:32:58
【问题描述】:
我们的应用程序中有一些存储库类,其方法如下:
public override void Add(Template template)
{
CheckDuplicateDescription(template);
base.Add(template);
}
public override void Update(Template template)
{
CheckDuplicateDescription(template);
base.Update(template);
}
private void CheckDuplicateDescription(Template template)
{
if( _dbSet.Any(x => x.Descrip.Equals(template.Descrip.Trim()) && x.TemplateId != template.TemplateId))
{
throw new DuplicatePropertyException("Description",
string.Format(Messages.alreadyExistsWithValue, template.Descrip.Trim()));
}
}
我试图弄清楚是否有办法使这个方法成为通用方法并在基础存储库类中实现(所以我们可能可以提供一个 bool 属性来告诉我们需要验证,也许还有要检查的列和 Pk 列的名称)。我不确定如何在更新方法中假设实体实体以通用方式编写这样的代码。
【问题讨论】:
-
您不应该为流程控制和可以通过其他方式(返回值等)处理的情况抛出异常。 softwareengineering.stackexchange.com/questions/189222/…
-
我将阅读第一个答案中提到的文章,但现在更改它将是一个巨大的重写工作,因为它已经在我们的应用程序中以这种方式处理(服务器例外-side 代码通过 web 应用程序中的 toastr 处理)。目前,我正在考虑将通用逻辑的那部分设为通用。
-
您可以引入service layer 进行验证。此外,如果它基于 Web(MVC?),您可以最大化客户端验证以确保异常最小化。
-
它是使用 angularJs 作为前端的 EF/ASP.NET MVC 应用程序。我写了一篇关于从前端使用服务器端验证的文章,您可能会觉得这很有趣 - 我将阅读您稍后参考的两篇文章。 social.technet.microsoft.com/wiki/contents/articles/…
标签: c# sql-server entity-framework