0

我正在查看一个指南,上面写着“应该使用自动映射器将模型映射到视图模型。” 为什么会有这样的指导?

为什么不让模型成为视图模型的属性?例如,我可以使用这样的视图模型对联系人列表进行分页:

class ContactListPaginatedViewModel {
    public Contact myContact;  //the model object
    public PageInfo pageInfo;
}

即使我需要回发来更新联系信息 - 模型活页夹也会很容易地解决这个问题。如果我需要从绑定中省略某些字段/属性(通过回发或其他方式),那么我可以简单地将绑定注释与“包含/排除”一起使用。

我是否遗漏了一些更大的问题,表明手动映射过程(模型的所有属性都在视图模型上复制)是可取的?

我能想到的最好的结果是模型可能有许多视图(或视图模型)不需要的属性......但即使在那种情况下,上述指导仍然没有意义。

洞察力?

4

3 回答 3

1

通常,如果您有一个 dto 类,最好只为视图模型提供模型所需的属性。这意味着您实际上只为实际使用的内容指定属性,例如我有一个Client包含 20 个字段的对象,我需要Id和您在该模型中需要的属性。FullNameClient

此外,从架构的角度来看,您真的想将 DTO 类公开给视图吗?在大多数情况下,某种服务层用作 DTO 类和视图本身之间的临时通信点,这反过来会为您填充视图模型。

于 2012-04-17T18:30:23.143 回答
0

我几乎总是在我的 ViewModel 中保留一个模型参考。如果我需要一些额外的属性,我只需将它们添加到我的视图模型中。海事组织很好。

于 2012-04-17T21:31:45.257 回答
0

因为将数据实体直接发送到视图是不好的做法。造成这种情况的原因有很多,包括安全原因。但也有更实际的原因,例如能够应用视图模型属性(当您的实体自动生成时您无法做到这一点,尽管有一些方法可以解决这个问题,例如使用伙伴类)。

一般来说。您需要一个特定于您的视图的视图模型。此视图模型应映射到您的业务对象。你的业务对象与你的实体对象是否不同,更多的是一个灰色地带,但视图模型和业务模型之间应该有明确的区别。

于 2012-04-17T18:42:07.093 回答