【发布时间】:2017-01-02 20:40:44
【问题描述】:
我问这个是因为经过长时间的搜索,我还没有找到一个好的答案......
这就是我想要的:
示例:我有一个域模型“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 以在视图中显示验证错误。但是,当验证失败时,我绝不能发布作业。 因此,为了让我的代码更健壮,我在服务层的 Publish 方法中添加了第二个验证检查:
public void Publish(JobPosting jobPosting){
if(ValidatePublish(jobPosting).Success){
jobPosting.State = JobPostingState.Published;
...
}
}
但我对这种方法感觉不太好,因为现在在每个控制器发布请求期间验证正常时,我会调用两次验证。
你怎么看。第二个电话太多了吗?有更好的方法吗? 我问是因为我的整个应用程序看起来像那样,如果我忘记了控制器中的验证调用,我最终可能会在数据库中得到一个不允许的域模型状态。这就是我在每个服务方法中添加第二个验证检查的原因。
提前感谢您对此的看法!!!
【问题讨论】:
-
“我两次调用验证”你第二次调用验证在哪里?
-
控制器中的第一次调用:var validationResult = _jobService.ValidatePublish(jobPosting);第二次在服务方法发布:if(ValidatePublish(jobPosting).Success){
-
那你为什么要在方法中再次验证?您可以直接发布。
标签: asp.net asp.net-mvc validation service-layer business-logic-layer