MVC:视图和模型在多大程度上是分开的?

时间:2013-10-09 08:13:10

标签: asp.net-mvc

我正在阅读“Steven Sanderson的Pro ASP.NET MVC 2”一书,我目前正在阅读第5章。 到目前为止的好书!我一直在构建我的第一个MVC Web应用程序:SportsStore应用程序。

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

  

视图是用于将视图模型转换为的简单模板   完成了一段HTML。他们被允许包含基本的,   仅呈现逻辑,例如迭代列表的能力   对象为每个对象或能力生成HTML表行   根据某些标志隐藏或显示页面的一部分   视图模型中的对象,但没有比这更复杂。

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

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

视图使用模型绑定,此模型的类型为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语句“简单地”输出Cart的总值。但等一下......

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我根本不喜欢模特的方法。在这种情况下,我会写一个readonly属性TotalValue,它执行相同的计算。属性不应该有副作用,因此在视图中使用它应该是安全的。