我问这个,因为很长一段时间后,搜索我还没有找到一个很好的答案对这个尚未...业务/服务层ASP.NET复杂的验证
下面是我想:
例如:我有一个域模型“JobPosting”,如果用户仍然是草稿,那么用户应该可以将状态更改为发布状态。在发布之前,我不仅要验证模型属性,还必须验证有关用户帐户的许多不同要求,它是已注册的公司等。所有此验证逻辑都将放入服务层。到目前为止好...
这是我的业务层看起来像:
public IValidationResult ValidatePublish(JobPosting jobPosting){
...
}
public void Publish(JobPosting jobPosting){
jobPosting.State = JobPostingState.Published;
...
}
我的任何控制器:
public ActionResult Publish(PublishViewModel model){
...
var validationResult = _jobService.ValidatePublish(jobPosting);
if(validationResult.Success){
_jobService.Publish(jobPosting);
...
}
...
}
在这里,现在我的问题:
我想能够从控制器调用ValidatePublish在视图中显示验证错误。但是,如果验证失败,我绝不能发布一份工作。 所以有我的代码更健壮,我添加在服务层在我发布方法的第二验证检查:
public void Publish(JobPosting jobPosting){
if(ValidatePublish(jobPosting).Success){
jobPosting.State = JobPostingState.Published;
...
}
}
,但我还没有这么好的感觉用这种方法,因为我现在在验证调用验证两次在每个控制器发布请求期间都可以。
您怎么看。第二个电话是多少?有更好的方法吗? 我在问,因为我的整个应用程序看起来像这样,如果我永远不会忘记控制器中的验证调用,我可能会在数据库中导致一个不允许的域模型状态。这就是为什么我在每个服务方法中添加第二个验证检查的原因。
在此先感谢您的想法!
“我要求验证两次”第二次你在哪里调用验证? –
控制器中的第一个呼叫: var validationResult = _jobService.ValidatePublish(jobPosting); 第二次服务方法发布: if(ValidatePublish(jobPosting).Success){ – Simon
那么为什么你要在方法中再次验证?你可以直接发布。 –