我正在阅读“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对这项工作的限制是什么?
我有什么不明白或者这是真的吗?
答案 0 :(得分:1)
我根本不喜欢模特的方法。在这种情况下,我会写一个readonly属性TotalValue
,它执行相同的计算。属性不应该有副作用,因此在视图中使用它应该是安全的。