有关视图模型和模型更新的最佳实践,其中包含字段的子集

Mar*_*tin 13 asp.net asp.net-mvc automapper asp.net-mvc-2

通过选择MVC来开发我们的新网站,我发现自己正处于围绕着我的"最佳实践"中进行实时开发.两周前,NerdDinner是我的向导,但随着MVC 2的发展,即使它看起来已经过时了.这是一次激动人心的经历,我很荣幸能够每天与智能程序员保持密切联系.

现在我偶然发现了一个似乎无法直接回答的问题 - 无论如何都要从所有的博客中得到答案 - 而且我想从社区中获得一些见解.这是关于编辑(阅读:编辑动作).大量的材料,教程和博客,涉及创建和查看模型.因此,尽管这个问题可能没有提出问题,但我希望能够进行一些讨论,这有助于我决定我将采取的发展道路.

我的模型代表具有多个字段的用户,如姓名,地址和电子邮件.实际上,所有名称都在字段上,每个名称都有名字,姓氏和中间名."详细信息"视图显示所有这些字段,但您一次只能更改一组字段,例如,您的名称.用户展开表单,而其他字段在上方和下方仍然可见.因此,回发的表单包含表示模型的字段的子集.

虽然这对我们和我们的布局问题很有吸引力,但由于各种原因,它会被严肃的MVC开发人员所避开.我一直在阅读一些模式和最佳实践,看起来这与viewmodel == view的范例无关.或者我弄错了?

无论如何,NerdDinner指示使用FormCollection och UpdateModel.所有空字段都被高兴地忽略了.从那以后,MVC社区已经放弃了这种方法,以至于没有发现MVC 2 中的错误.如果没有formcollection中的完整模型,UpdateModel将无法工作.

获得最多赞誉的视图模型模式似乎是包含自定义视图模型实体的专用视图模型,并且是我的设计问题可以与之兼容的唯一模型.它需要繁琐的映射,尽管使用AutoMapper吉米博加德想法可能会减轻这种情况,这可能是也可能不值得.他还提出了视图和视图模型之间的1:1关系.

为了与这些设计范例保持一致,我将为每个扩展字段集创建一个视图和相关视图.视图模型将各自几乎相同,仅在只读字段中不同,视图也包含多次重复标记.这对我来说似乎很荒谬.将来我可能希望能够同时显示两个,更多或所有字段集.

我会非常认真地阅读我希望引发的讨论.提前谢谢了.

mne*_*syn 0

我有完全相同的问题,但我无法很好地表述它。

就我而言,将会有大量的 ViewModel,因为不同的用户会根据一组角色看到不同的表单。我认为 ViewModel 和 View 之间的 1:1 关系非常模糊。如果我编写一个超级视图,它几乎只是简单地使用EditorForModel而没有更多内容,该怎么办?现在我对所有事物都有一个尽管高度退化的视图,所以我也只有一个 ViewModel?

我的想法是编写一个EditorForModel不仅基于反射(即编译时已知的信息)工作,而且还基于(特定于域的)运行时规则的工作,例如由当前用户的角色、当前时间等控制。 ,还需要编写一个ModelBinder带有验证的自定义以及从 Model 到 ViewModel 的自定义映射。尽管如此,这还是让我无法编写愚蠢且容易出错的代码。

由于我的模型(或 DomainModel)包含大量逻辑,因此我根本不希望通过 ModelBinding 对其进行修改。此外,由于不可能知道编译时将出现哪些字段,因此不可能提供适当的 ViewModel。然而,“完整”,即最大ViewModel 是已知的。从 ViewModel 到 Model 的映射再次涉及自定义代码,但只要规则可以形式化,那就应该可行。

抱歉,我的文字非常令人困惑,但我自己现在也很困惑,而且我必须跑步。和CT一样,也无法发表评论。