我有一个 ASP.Net 应用程序,它有很多关于对象是否可以提交到数据库的业务规则。
在基本层面上,一个人是冲刺的一部分,冲刺是项目的一部分。
基本规则是:
一个人被分配到一个 sprint,但可能不是一个 sprint 的整个持续时间(它有一个开始和结束日期)。因此,当他们分配此人时,他的开始日期和结束日期必须介于(包括)冲刺的开始日期和结束日期之间。
一个项目可以有许多冲刺,但没有一个冲刺可以在项目开始/结束日期之外。
我的解决方案有一个 UI 项目、服务层、业务层和数据访问层。
我现在正在构建验证,但不确定应该在我的应用程序的哪个级别进行校准。我不相信它在 UI 上,因为那时我需要在我的 ASP.Net 项目上复制验证规则......也许是我的 WinForms 前端......
我认为它应该在业务逻辑中,因为它具有业务规则。因此,我打算创建一个名为“Validations”的类,对于存储到数据库中的每个业务对象,我的 Validations 中有一个名为“IsObjectOK”的方法,接受我想要验证的对象类型,并返回错误列表。
所以:
public List<String> IsObjectOK(SprintDto source)
{
// Do validations, and return list of errors, or NULL if none
}
验证规则的示例可能是:
var Project = BusinessLayer.GetProject(source.ProjectId);
// check if Start/End dates fall between Project.Start and Project.End dates
如果有问题,请将其添加到错误列表中。
这似乎是一个不错的方法。我正在寻找有关我处理验证的方法的确认,以及任何提示和技巧?我不应该担心数据库命中吗?我的意思是,对于一个 sprint,我可能需要验证大约 6 或 7 条“规则”,所有这些都可能从不同的表中获取数据。因此,一次保存需要 7 个数据库查询(加上连接开销)。(SQL Server 2012)。我认为这不必担心,因为这一切都交给了业务和数据层。