c# – 使用3层架构,在ASP.NET MVC应用程序中验证业务规则的更好
发布时间:2020-12-15 17:47:59 所属栏目:百科 来源:网络整理
导读:我正在开发一个具有3层经典架构的ASP.NET MVC应用程序 数据访问(存储库) 业务逻辑(服务) 3.应用层(MVC Controller类) 任务是跟随领域课程学习者,学习者可以考试,考试产生一个订单(订单类),之后,学习者参加考试,我们需要发布每个学习者的考试成绩(这意味着给
我正在开发一个具有3层经典架构的ASP.NET MVC应用程序
数据访问(存储库) 业务逻辑(服务) 3.应用层(MVC Controller类) 任务是跟随领域课程学习者,学习者可以考试,考试产生一个订单(订单类),之后,学习者参加考试,我们需要发布每个学习者的考试成绩(这意味着给一个标记和等级),并有一些需要验证的业务规则 结果尚未公布 所有具有身份状态的学员都应该有标记 应确认分级边界(考试标记和成绩) 当用户发布结果时,所有这些规则应该验证,如果某些规则不满足,应该显示错误消息. 我决定与验证业务规则相关的所有逻辑都保留在Service类中,如果任何规则未传递特定的异常,则在控制器类中,此异常将捕获并显示错误给客户端.这是代码 服务类 public void ReleaseResults(long orderId) { var order =orderRepository.Get(orderId); Check.Require(order != null,"Order was not found"); if (IsOrderReleased(order)) { throw new ReleaseResultsException("The results has been already released",order.OrderNo); } if (AllLearnersHasStatusPresentAndMark(order)) { throw new ReleaseResultsException("One or more learners unmarked",order.OrderNo); } if (!GradingBoundaryConfirmed(order)) { throw new ReleaseResultsException("The Grading boundary needs to be confirmed",order.OrderNo); } foreach (var learnerDetail in order.LearnerDetails) { if (HasNotStatusPresent(learnerDetail)) { continue; } learnerDetail.SetReleasedResults(); } orderRepository.SaveOrUpdate(order); } 控制器类 public ActionResult Release(EncryptedId orderId) { Check.Require(orderId != null,"The parameter orderId was null"); try { orderReleaseResultsService.ReleaseResults(orderId); } catch (ReleaseResultsException e) { return Content(string.Format("Error: {0}",e.Message)); } return Content(MUI.TheResultsHasBeenReleased); } 我不知道这是否是验证业务规则的最佳方式,任何人都可以帮助我提出建议或更好地解决这个问题? 解决方法
我将避免使用异常进行验证,但是方法返回true / false.显然,对于某些任务,其中验证是数据层的数据(例如强制数据库约束),您可以使用异常.
您可以查看以下关于validating at the service layer的教程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |