相关疑难解决方法(0)

验证:模型或ViewModel

在模型或ViewModel上使用带有MVC(MVVM)的ViewModel时,验证应该驻留在哪里?(或两者兼而有之)?为什么?我特别考虑到ASP.NET MVC的V2即将推出,我提出这个问题.

复杂/自定义验证怎么样?

validation asp.net-mvc mvvm asp.net-mvc-2

24
推荐指数
3
解决办法
3709
查看次数

使用3层体系结构验证ASP.NET MVC应用程序中的业务规则的更好方法是什么?

我正在开发一个带有3层经典架构的ASP.NET MVC应用程序1.数据访问(Repositories)2.业务逻辑(Services)3.应用层(MVC Controller类)任务是遵循领域类Learner和学习者可以参加考试,参加考试会产生一个订单(订单类),之后学习者参加考试,我们需要为每个学习者发布考试成绩(这意味着给出一个分数和成绩)并且有一些需要的商业规则已验证1.结果尚未公布2.所有有身份的学员应该有标记3.应该确认评分边界(考试的分数和等级)当用户确实发布结果时,所有这些规则应该验证,如果有一些规则不满意应该显示错误信息.我决定所有与验证业务规则相关的逻辑都保留在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);
    }
Run Code Online (Sandbox Code Playgroud)

控制器类

        public ActionResult Release(EncryptedId orderId)
    {
        Check.Require(orderId …
Run Code Online (Sandbox Code Playgroud)

c# architecture asp.net-mvc business-rules

9
推荐指数
2
解决办法
1万
查看次数