0

我正在阅读 Steven Sanderson 撰写的“Pro ASP.NET MVC 2”一书,目前正在阅读第 5 章。到目前为止,这本书很棒!我按照这本书构建了我的第一个 MVC Web 应用程序:SportsStore 应用程序。

在介绍中,作者对视图进行了说明:

视图是用于将视图模型转换为完成的 HTML 的简单模板。它们被允许包含基本的、仅表示的逻辑,例如能够遍历对象列表以为每个对象生成 HTML 表格行,或者能够根据上的标志隐藏或显示页面的一部分视图模型中的一些对象,但没有比这更复杂的了。

但是,在构建了这个简单的 Web 应用程序后,在第 161 页上,我在以下语句中看到了以下语句\Views\Cart\Index.aspx

<td align="right">
   <%: Model.Cart.ComputeTotalValue().ToString("c") %>
</td>

View 使用Model Binding,并且这个 Model 是类型Store.WebUI.Models.CartIndexViewModel

 public class CartIndexViewModel
    {
        public Cart Cart { get; set; }
        public string ReturnUrl { get; set; }
    }

Cart课程是:

namespace Store.Domain.Entities
{
    public class Cart
    {
        private List<CartLine> lines = new List<CartLine>();
        public IList<CartLine> Lines
        {
            get { return lines.AsReadOnly(); }
        }

        public decimal ComputeTotalValue()
        {
            return lines.Sum(l => l.Product.Price * l.Quantity);
        }

    }
}

好的,所以 View 语句“简单地”输出了购物车的总价值。但是等一下...

当我在代码中看到这样的语句时,我Model.Cart.ComputeXXX_YYY()如何确定“先验”(即不检查代码)此方法是否执行不改变模型状态的简单计算?

如果相反,它是一个复杂的过程,涉及模型的各种实体的修改和更新?

毕竟,能够直接调用模型,“懒惰的程序员”可以简单地绕过控制器逻辑。MVC 对这些工作的限制是什么?

有什么我不明白的地方,或者这是真的吗?

4

1 回答 1

1

我根本不喜欢模型上的方法。在这种情况下,我将编写一个TotalValue执行相同计算的只读属性。属性不应该有副作用,所以在视图中使用应该是安全的。

于 2013-10-09T11:09:54.607 回答