在MVC中,什么是ViewModel?

ali*_*c83 18 asp.net-mvc

我是否正确地认为它几乎就像是视图所需的所有对象的包装器?

例如,假设您有一个销售音乐和DVD的在线商店.在您的浏览页面上,您需要显示所有dvds和音乐的列表.那么你会构造一个ViewModel对象,它有两个包含专辑列表和dvds列表的属性吗?

根据我的理解,你似乎拥有所有的模型类,即.一个专辑/ DVD类,但仅仅通过这些对你的视图来说是不够的.ViewModel是否基本上充当View所需的所有数据的载体?

Jon*_*Jon 16

你的理解大多是正确的,但它并不完整.

ViewModel还可以执行从您的模型携带的数据类型到View可以方便地使用的数据类型的转换; 这甚至可能意味着ViewModel不直接携带模型,而是以更合适的格式携带(可能是子集)相同信息的其他船只.

考虑到你可以有一个聚合专辑和DVD的库模型 - 这种模型和相应的ViewModel之间的区别正是模型不关心(甚至不知道)视图,而ViewModel的明确目的是促进它.